merge from RCL_2_0 to MCL
authorDan Podwall <dan.podwall@nokia.com>
Mon, 27 Apr 2009 15:07:35 -0500
changeset 128 c028612cc555
parent 127 c937102a5510 (diff)
parent 124 4629a6a90ed5 (current diff)
child 130 825355d51766
merge from RCL_2_0 to MCL
.branch.txt
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/BuildArgumentsInfo.java
builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/builder/CarbideCPPBuilder.java
carbidesdk/com.nokia.carbide.cpp.sdk.doc.user/html/reference/api_Change_Notes.htm
core/carbide_releases/readme/readme_sdks.html
core/com.nokia.carbide.cpp.codescanner/html/customizing_cs.htm
core/com.nokia.carbide.cpp.codescanner/html/release_notes.htm
core/com.nokia.carbide.cpp.doc.user/html/bugs_fixed.htm
core/com.nokia.carbide.cpp.doc.user/tocCarbide.xml
core/com.nokia.carbide.cpp.sdk.core/src/com/nokia/carbide/cpp/internal/sdk/core/processes/CheckS60CustKitSupport.java
core/com.nokia.carbide.cpp/splash.bmp
--- a/.branch.txt	Fri Apr 24 10:31:21 2009 -0500
+++ b/.branch.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -1,2 +1,2 @@
-RCL_2_0
-.
+default
+
--- a/.hgignore	Fri Apr 24 10:31:21 2009 -0500
+++ b/.hgignore	Mon Apr 27 15:07:35 2009 -0500
@@ -1,6 +1,8 @@
 # use glob syntax.
 syntax: glob
-*.class
 bin
 runtime
 \.DS_Store
+connectivity/com.nokia.tcf/os/*
+connectivity/com.nokia.tcf/native/TCFNative/*/Release
+connectivity/com.nokia.tcf/native/TCFNative/*/Debug
--- a/builder/com.nokia.carbide.cdt.builder.test/META-INF/MANIFEST.MF	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cdt.builder.test/META-INF/MANIFEST.MF	Mon Apr 27 15:07:35 2009 -0500
@@ -6,16 +6,21 @@
 Bundle-Activator: com.nokia.carbide.cdt.builder.test.TestPlugin
 Bundle-Vendor: NOKIA
 Bundle-Localization: plugin
-Require-Bundle: org.eclipse.ui,
+Require-Bundle: abbot,
+ abbot.swt,
+ abbot.swt.eclipse,
+ org.eclipse.ui,
  org.eclipse.core.runtime,
  org.junit,
  com.nokia.carbide.cpp.sdk.core,
  org.eclipse.emf.common,
  com.nokia.carbide.cpp.project.core,
  org.eclipse.core.resources,
+ com.nokia.carbide.automation.utils,
  com.nokia.carbide.cdt.builder,
  com.nokia.carbide.cpp.epoc.engine,
  com.nokia.cpp.utils.core,
- org.eclipse.cdt.core
+ org.eclipse.cdt.core,
+ org.jdom
 Bundle-ActivationPolicy: lazy
 Export-Package: com.nokia.carbide.cdt.builder.test
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/abstractgcce.input.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,4 @@
+arm-none-symbianelf-g++: \test\test.cpp: No such file or directory
+arm-none-symbianelf-g++: no input files
+arm-none-symbianelf-g++: warning: `-x c++' after last input file has no effect
+arm-none-symbianelf-g++: error: some message
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/abstractgcce.regression.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+  <!--Error Marker at index 0-->
+  <marker_info file="^EMPTY^" line_number="0" message="\test\test.cpp: No such file or directory" severity="2" variable_name="^EMPTY^" external_path_string="test/test.cpp:" />
+  <!--Error Marker at index 1-->
+  <marker_info file="^EMPTY^" line_number="0" message="no input files" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 2-->
+  <marker_info file="^EMPTY^" line_number="0" message="`-x c++' after last input file has no effect" severity="1" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 3-->
+  <marker_info file="^EMPTY^" line_number="0" message="some message" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+</root>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/2969.gcce.input.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,17 @@
+perl.exe -S ABLD.PL \Symbian\Carbide\workspace\test3\group\ target gcce urel  
+  make -r  -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Symbian\Carbide\workspace\test3\group\GCCE.make" TARGET CFG=UREL VERBOSE=-s
+arm-none-symbianelf-ld: \S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\ARMV5\LIB\foo.dso: No such file: No such file or directory
+make[1]: *** [\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\GCCE\urel\test3.exe] Error 1
+make: *** [TARGETTEST3] Error 2
+
+perl.exe -S ABLD.PL \Symbian\Carbide\workspace\test3\group\ target gcce urel  
+  make -r  -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Symbian\Carbide\workspace\test3\group\GCCE.make" TARGET CFG=UREL VERBOSE=-s
+arm-none-symbianelf-g++: \test\test.cpp: No such file or directory
+make[1]: *** [\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\GCCE\urel\test3.exe] Error 1
+make: *** [TARGETTEST3] Error 2
+
+perl.exe -S ABLD.PL \Symbian\Carbide\workspace\test3\group\ target gcce urel  
+  make -r  -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Symbian\Carbide\workspace\test3\group\GCCE.make" TARGET CFG=UREL VERBOSE=-s
+arm-none-symbianelf-as: \test\test.s: No such file or directory
+make[1]: *** [\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\GCCE\urel\test3.exe] Error 1
+make: *** [TARGETTEST3] Error 2
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/2969.gcce.regression.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+  <!--Error Marker at index 0-->
+  <marker_info file="^EMPTY^" line_number="0" message="\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\ARMV5\LIB\foo.dso: No such file: No such file or directory" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 1-->
+  <marker_info file="^EMPTY^" line_number="0" message="\test\test.cpp: No such file or directory" severity="2" variable_name="^EMPTY^" external_path_string="test/test.cpp:" />
+  <!--Error Marker at index 2-->
+  <marker_info file="^EMPTY^" line_number="0" message="\test\test.s: No such file or directory" severity="2" variable_name="^EMPTY^" external_path_string="test/test.s:" />
+</root>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/3053.rvct.input.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,20 @@
+make[1]: Leaving directory `C:/Symbian/9.1/S60_3rd_MR/S60Ex/AddressBook/group'
+  make -r  -f
+"\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Symbian\9.1\S60_3rd_MR\S60Ex\AddressBook\group\ARMV5.make"
+TARGET CFG=UDEB
+Warning: C3492W: Site License not found, falling back to normal license
+ARM/Thumb C/C++ Compiler, RVCT2.2 [Build 593]
+Error: C3397E: Cannot obtain license for Compiler (feature compiler) with
+license version >= 2.2: 
+The desired vendor daemon is down
+ 1) Check the lmgrd log file, or 2) Try lmreread
+Feature:       compiler
+Vendor:Host:   asqarun1.americas.nokia.com
+License path:  7166@asqarun1.americas.nokia.com
+FLEXlm error:  -97,121
+For further information, refer to the FLEXlm End User Manual,
+available at "www.macrovision.com".
+
+make[1]: ***
+[..\..\..\EPOC32\BUILD\Symbian\9.1\S60_3rd_MR\S60Ex\AddressBook\group\ADDRESSBOOK\ARMV5\UDEB\AddressBookApp.o]
+Error 1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/3053.rvct.regression.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+  <!--Error Marker at index 0-->
+  <marker_info file="^EMPTY^" line_number="0" message="Error: C3397E: Cannot obtain license for Compiler (feature compiler) with" severity="3" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+</root>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/3134.winscw.input.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,2 @@
+  -- C:\Symbian\9.1\S60_3rd\EPOC32\INCLUDE\RVCT0_0\RVCT0_0.H: No such file or directory
+  ERROR: cpp.EXE failure
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/3134.winscw.regression.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+  <!--Error Marker at index 0-->
+  <marker_info file="^EMPTY^" line_number="-1" message="RVCT not installed or 'armcc' is not on PATH. Please check that your environment for the RVCT compiler is correct." severity="3" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 1-->
+  <marker_info file="^EMPTY^" line_number="-1" message="ERROR: cpp.EXE failure" severity="3" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+</root>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/3201.winscw.input.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,9 @@
+process_begin: CreateProcess((null), mwccsym2.exe -g -O0 -wchar_t off -align 4
+-warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool
+-nostdinc -d _DEBUG -d _UNICODE -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d
+__WINSCW__ -cwd source -i- -i
+\AUSCVS_JOEY_DEV\ECLIPSE\RUNTIME-NEW_CONFIGURATION\TESTLIB\INC -i
+\Symbian\8.0a\S60_2nd_FP2_CW\EPOC32\INCLUDE -o
+\Symbian\8.0a\S60_2nd_FP2_CW\EPOC32\BUILD\AUSCVS_JOEY_DEV\ECLIPSE\RUNTIME-NEW_CONFIGURATION\TESTLIB\GROUP\TESTLIB\WINSCW\UDEB\TESTLIB.o
+-c \AUSCVS_JOEY_DEV\ECLIPSE\RUNTIME-NEW_CONFIGURATION\TESTLIB\SRC\Testlib.cpp,
+...) failed.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/3201.winscw.regression.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+  <!--Error Marker at index 0-->
+  <marker_info file="^EMPTY^" line_number="-1" message="Cannot launch a process. Check the build console for process creation errors." severity="3" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+</root>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/3490.winscw.input.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,1 @@
+'nmake' is not recognized as an internal or external command, operable program or batch file.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/3490.winscw.regression.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+  <!--Error Marker at index 0-->
+  <marker_info file="^EMPTY^" line_number="-1" message="'nmake' is not recognized as an internal or external command, operable program or batch file." severity="3" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+</root>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/3642.winscw.input.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,11 @@
+***Performing targeted build for configuration... Phone Debug (GCCE)
+[S60_3rd_MR].
+C:\WINNT\system32\cmd.exe /c abld  target GCCE UDEB  -v 
+  make -r  -f
+"\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Symbian\Carbide\workspace\baz\group\GCCE.make"
+TARGET CFG=UDEB
+The process cannot access the file because it is being used by another process.
+make[1]: *** [..\..\..\..\9.1\S60_3rd_MR\EPOC32\RELEASE\GCCE\UDEB\baz.exe]
+Error 1
+make: *** [TARGETBAZ] Error 2
+make   -C \Symbian\Carbide\workspace\baz\group -f "ICONS_SCALABLE_DC.MK"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/3642.winscw.regression.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+  <!--Error Marker at index 0-->
+  <marker_info file="^EMPTY^" line_number="0" message="The process cannot access the file because it is being used by another process." severity="3" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+</root>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/4541.gcce.input.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,6 @@
+perl.exe -S ABLD.PL \Symbian\Carbide\kinoma\test3\group\ target gcce urel  
+  make -r  -f "\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Symbian\Carbide\kinoma\test3\group\GCCE.make" TARGET CFG=UREL VERBOSE=-s
+\S60\devices\S60_3rd_FP2_SDK_v1.1\EPOC32\BUILD\Symbian\Carbide\kinoma\test3\group\TEST3\GCCE\UREL\test3.o: In function `MainL()':
+test3.cpp:(.text+0x14): undefined reference to `foo()'
+make[1]: *** [\S60\devices\S60_3rd_FP2_SDK_v1.1\epoc32\release\GCCE\urel\test3.exe] Error 1
+make: *** [TARGETTEST3] Error 2
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/4541.gcce.regression.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+  <!--Error Marker at index 0-->
+  <marker_info file="^EMPTY^" line_number="0" message="test3.cpp: undefined reference to `foo()'" severity="2" variable_name="^EMPTY^" external_path_string="test3.cpp:" />
+</root>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/5618.gcce.input.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,13 @@
+perl.exe -S ABLD.PL \develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\ target gcce urel  
+  make -r  -f "\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\GCCE.make" TARGET CFG=UREL VERBOSE=-s
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\UREL\ScanEngine.o:(.rodata+0x14): undefined reference to `CScanEngine::HandleEvent(TECAMEvent const&)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\UREL\ScanEngine.o:(.rodata+0x18): undefined reference to `CScanEngine::ViewFinderReady(MCameraBuffer&, int)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\UREL\ScanEngine.o:(.rodata+0x1c): undefined reference to `CScanEngine::ImageBufferReady(MCameraBuffer&, int)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\UREL\ScanEngine.o:(.rodata+0x20): undefined reference to `CScanEngine::VideoBufferReady(MCameraBuffer&, int)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\UREL\ScanEngine.o:(.rodata+0x2c): undefined reference to `non-virtual thunk to CScanEngine::HandleEvent(TECAMEvent const&)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\UREL\ScanEngine.o:(.rodata+0x30): undefined reference to `non-virtual thunk to CScanEngine::ViewFinderReady(MCameraBuffer&, int)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\UREL\ScanEngine.o:(.rodata+0x34): undefined reference to `non-virtual thunk to CScanEngine::ImageBufferReady(MCameraBuffer&, int)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\UREL\ScanEngine.o:(.rodata+0x38): undefined reference to `non-virtual thunk to CScanEngine::VideoBufferReady(MCameraBuffer&, int)'
+make[1]: *** [..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\RELEASE\GCCE\UREL\BarcMe_20008181.exe] Error 1
+make: *** [TARGETBARCME] Error 2
+make -j 4 -s  -r -f "\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\BARCME.GCCE" UREL
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/5618.gcce.regression.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+  <!--Error Marker at index 0-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\UREL\ScanEngine.o:(.rodata+0x14): undefined reference to `CScanEngine::HandleEvent(TECAMEvent const&amp;)'" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 1-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\UREL\ScanEngine.o:(.rodata+0x18): undefined reference to `CScanEngine::ViewFinderReady(MCameraBuffer&amp;, int)'" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 2-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\UREL\ScanEngine.o:(.rodata+0x1c): undefined reference to `CScanEngine::ImageBufferReady(MCameraBuffer&amp;, int)'" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 3-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\UREL\ScanEngine.o:(.rodata+0x20): undefined reference to `CScanEngine::VideoBufferReady(MCameraBuffer&amp;, int)'" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 4-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\UREL\ScanEngine.o:(.rodata+0x2c): undefined reference to `non-virtual thunk to CScanEngine::HandleEvent(TECAMEvent const&amp;)'" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 5-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\UREL\ScanEngine.o:(.rodata+0x30): undefined reference to `non-virtual thunk to CScanEngine::ViewFinderReady(MCameraBuffer&amp;, int)'" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 6-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\UREL\ScanEngine.o:(.rodata+0x34): undefined reference to `non-virtual thunk to CScanEngine::ImageBufferReady(MCameraBuffer&amp;, int)'" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 7-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\develop\S60-3P\BarcMeProject\BarcMe\CS60-3P\BARCME\GCCE\UREL\ScanEngine.o:(.rodata+0x38): undefined reference to `non-virtual thunk to CScanEngine::VideoBufferReady(MCameraBuffer&amp;, int)'" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+</root>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/5824.gcce.input.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,23 @@
+perl.exe -S ABLD.PL \BlackFlag\ target gcce udeb  
+  make -r  -f "\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\BlackFlag\GCCE.make" TARGET
+CFG=UDEB VERBOSE=-s
+arm-none-symbianelf-g++: ..\..\SRC\Main.cpp: No such file or directory
+arm-none-symbianelf-g++: warning: `-x c++' after last input file has no effect
+arm-none-symbianelf-g++: no input files
+arm-none-symbianelf-g++: ..\..\SRC\Dbg_breakpoints.cpp: No such file or directory
+arm-none-symbianelf-g++: warning: `-x c++' after last input file has no effect
+arm-none-symbianelf-g++: no input files
+make[1]: ***
+[..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\BlackFlag\BLACKFLAG\GCCE\UDEB\main.o] Error 1
+make[1]: *** Waiting for unfinished jobs....
+make[1]: ***
+[..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\BlackFlag\BLACKFLAG\GCCE\UDEB\dbg_breakpoints.o] Error 1
+arm-none-symbianelf-g++: ..\..\SRC\Dbg_debug_menu.cpp: No such file or directory
+arm-none-symbianelf-g++: warning: `-x c++' after last input file has no effect
+arm-none-symbianelf-g++: no input files
+make[1]: ***
+[..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\BlackFlag\BLACKFLAG\GCCE\UDEB\dbg_debug_menu.o] Error 1
+make: *** [TARGETBLACKFLAG] Error 2
+arm-none-symbianelf-g++: ..\..\SRC\Dbg_derived_types.cpp: No such file or directory
+arm-none-symbianelf-g++: warning: `-x c++' after last input file has no effect
+arm-none-symbianelf-g++: no input files
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/5824.gcce.regression.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+  <!--Error Marker at index 0-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\SRC\Main.cpp: No such file or directory" severity="2" variable_name="^EMPTY^" external_path_string="../../SRC/Main.cpp:" />
+  <!--Error Marker at index 1-->
+  <marker_info file="^EMPTY^" line_number="0" message="`-x c++' after last input file has no effect" severity="1" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 2-->
+  <marker_info file="^EMPTY^" line_number="0" message="no input files" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 3-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\SRC\Dbg_breakpoints.cpp: No such file or directory" severity="2" variable_name="^EMPTY^" external_path_string="../../SRC/Dbg_breakpoints.cpp:" />
+  <!--Error Marker at index 4-->
+  <marker_info file="^EMPTY^" line_number="0" message="`-x c++' after last input file has no effect" severity="1" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 5-->
+  <marker_info file="^EMPTY^" line_number="0" message="no input files" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 6-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\SRC\Dbg_debug_menu.cpp: No such file or directory" severity="2" variable_name="^EMPTY^" external_path_string="../../SRC/Dbg_debug_menu.cpp:" />
+  <!--Error Marker at index 7-->
+  <marker_info file="^EMPTY^" line_number="0" message="`-x c++' after last input file has no effect" severity="1" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 8-->
+  <marker_info file="^EMPTY^" line_number="0" message="no input files" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 9-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\SRC\Dbg_derived_types.cpp: No such file or directory" severity="2" variable_name="^EMPTY^" external_path_string="../../SRC/Dbg_derived_types.cpp:" />
+  <!--Error Marker at index 10-->
+  <marker_info file="^EMPTY^" line_number="0" message="`-x c++' after last input file has no effect" severity="1" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 11-->
+  <marker_info file="^EMPTY^" line_number="0" message="no input files" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+</root>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/6415.winscw.input.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,17 @@
+Reportagencycontainer.cpp
+Reportcontainer.cpp
+Reportprojectcontainer.cpp
+Reportselectcontainer.cpp
+Reportsummarycontainer.cpp
+Reporttaskcontainer.cpp
+Reportview.cpp
+Yearselectitem.cpp
+Importhistorycontainer.cpp
+make[1]: *** [..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\RELEASE\GCCE\UREL\Punch2Go_A00001CE.exe] Error 87
+Importprogressdlgimpl.cpp
+Logentrydetailsdlg.cpp
+Logentrydetailscontainer.cpp
+Logentryeditdlg.cpp
+Logentryeditlistbox.cpp
+make: *** [TARGETPUNCH2GO] Error 2
+Maincontainer.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/6415.winscw.regression.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+  <!--Error Marker at index 0-->
+  <marker_info file="^EMPTY^" line_number="-1" message="make[1]: *** [..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\RELEASE\GCCE\UREL\Punch2Go_A00001CE.exe] Error 87 - possibly too many arguments.  If there are a lot of source files in a library, try breaking those out into multiple libraries." severity="3" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+</root>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/6417.gcce.input.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,181 @@
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::NewL(CDataKeeper&)':
+Overtimehandler.cpp:(.text+0x0): multiple definition of `COvertimeHandler::NewL(CDataKeeper&)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x0): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::COvertimeHandler(CDataKeeper&)':
+Overtimehandler.cpp:(.text+0xa4): multiple definition of `COvertimeHandler::COvertimeHandler(CDataKeeper&)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0xa4): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::ConstructL()':
+Overtimehandler.cpp:(.text+0x1ac): multiple definition of `COvertimeHandler::ConstructL()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x1ac): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::COvertimeHandler(CDataKeeper&)':
+Overtimehandler.cpp:(.text+0x40): multiple definition of `COvertimeHandler::COvertimeHandler(CDataKeeper&)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x40): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::restoreDefaultValues()':
+Overtimehandler.cpp:(.text+0x3b8): multiple definition of `COvertimeHandler::restoreDefaultValues()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x3b8): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:(.rodata+0x0): multiple definition of `vtable for COvertimeHandler'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:(.rodata+0x0): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::~COvertimeHandler()':
+Overtimehandler.cpp:(.text+0x108): multiple definition of `COvertimeHandler::~COvertimeHandler()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x108): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::~COvertimeHandler()':
+Overtimehandler.cpp:(.text+0x13c): multiple definition of `COvertimeHandler::~COvertimeHandler()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x13c): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::~COvertimeHandler()':
+Overtimehandler.cpp:(.text+0x170): multiple definition of `COvertimeHandler::~COvertimeHandler()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x170): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::save(MSettingsStorage&)':
+Overtimehandler.cpp:(.text+0x1b0): multiple definition of `COvertimeHandler::save(MSettingsStorage&)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x1b0): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::load(MSettingsStorage&)':
+Overtimehandler.cpp:(.text+0x280): multiple definition of `COvertimeHandler::load(MSettingsStorage&)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x280): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::handleViewActivated()':
+Overtimehandler.cpp:(.text+0x450): multiple definition of `COvertimeHandler::handleViewActivated()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x450): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::handleViewDeactivated()':
+Overtimehandler.cpp:(.text+0x454): multiple definition of `COvertimeHandler::handleViewDeactivated()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x454): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::handleWentBackground()':
+Overtimehandler.cpp:(.text+0x458): multiple definition of `COvertimeHandler::handleWentBackground()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x458): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::handleWentForeground()':
+Overtimehandler.cpp:(.text+0x45c): multiple definition of `COvertimeHandler::handleWentForeground()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x45c): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::getOvertimeEngine()':
+Overtimehandler.cpp:(.text+0x460): multiple definition of `COvertimeHandler::getOvertimeEngine()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x460): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::getPunchEngine()':
+Overtimehandler.cpp:(.text+0x478): multiple definition of `COvertimeHandler::getPunchEngine()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x478): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::getSelectedHolidayId() const':
+Overtimehandler.cpp:(.text+0x490): multiple definition of `COvertimeHandler::getSelectedHolidayId() const'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x490): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::getSelectedHolidayObject()':
+Overtimehandler.cpp:(.text+0x498): multiple definition of `COvertimeHandler::getSelectedHolidayObject()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x498): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::getEditHolidayObject()':
+Overtimehandler.cpp:(.text+0x4c0): multiple definition of `COvertimeHandler::getEditHolidayObject()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x4c0): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::getSelectedVacationId() const':
+Overtimehandler.cpp:(.text+0x4c8): multiple definition of `COvertimeHandler::getSelectedVacationId() const'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x4c8): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::getSelectedVacationObject()':
+Overtimehandler.cpp:(.text+0x4d0): multiple definition of `COvertimeHandler::getSelectedVacationObject()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x4d0): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::getEditVacationObject()':
+Overtimehandler.cpp:(.text+0x4f8): multiple definition of `COvertimeHandler::getEditVacationObject()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x4f8): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::getStartStatistics() const':
+Overtimehandler.cpp:(.text+0x500): multiple definition of `COvertimeHandler::getStartStatistics() const'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x500): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::getEndStatistics() const':
+Overtimehandler.cpp:(.text+0x508): multiple definition of `COvertimeHandler::getEndStatistics() const'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x508): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::getStartResult() const':
+Overtimehandler.cpp:(.text+0x510): multiple definition of `COvertimeHandler::getStartResult() const'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x510): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::getWorkHours() const':
+Overtimehandler.cpp:(.text+0x518): multiple definition of `COvertimeHandler::getWorkHours() const'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x518): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::setSelectedHolidayId(int)':
+Overtimehandler.cpp:(.text+0x520): multiple definition of `COvertimeHandler::setSelectedHolidayId(int)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x520): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::setSelectedVacationId(int)':
+Overtimehandler.cpp:(.text+0x528): multiple definition of `COvertimeHandler::setSelectedVacationId(int)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x528): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::setStartStatistics(TTime const&)':
+Overtimehandler.cpp:(.text+0x530): multiple definition of `COvertimeHandler::setStartStatistics(TTime const&)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x530): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::setEndStatistics(TTime const&)':
+Overtimehandler.cpp:(.text+0x598): multiple definition of `COvertimeHandler::setEndStatistics(TTime const&)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x598): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::setStartResult(int)':
+Overtimehandler.cpp:(.text+0x600): multiple definition of `COvertimeHandler::setStartResult(int)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x600): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::setWorkHours(int)':
+Overtimehandler.cpp:(.text+0x63c): multiple definition of `COvertimeHandler::setWorkHours(int)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x63c): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::handleHolidayEditL(MObjectProvider*, MReloadable*)':
+Overtimehandler.cpp:(.text+0x678): multiple definition of `COvertimeHandler::handleHolidayEditL(MObjectProvider*, MReloadable*)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x678): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::canModifyObject(TBOBase const*)':
+Overtimehandler.cpp:(.text+0xb20): multiple definition of `COvertimeHandler::canModifyObject(TBOBase const*)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0xb20): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::handleHolidayNewL(MObjectProvider*, MReloadable*)':
+Overtimehandler.cpp:(.text+0x750): multiple definition of `COvertimeHandler::handleHolidayNewL(MObjectProvider*, MReloadable*)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x750): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::handleHolidayDeleteL(MObjectProvider*, MReloadable*)':
+Overtimehandler.cpp:(.text+0x7f4): multiple definition of `COvertimeHandler::handleHolidayDeleteL(MObjectProvider*, MReloadable*)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x7f4): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::handleVacationEditL(MObjectProvider*, MReloadable*)':
+Overtimehandler.cpp:(.text+0x8cc): multiple definition of `COvertimeHandler::handleVacationEditL(MObjectProvider*, MReloadable*)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x8cc): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::handleVacationNewL(MObjectProvider*, MReloadable*)':
+Overtimehandler.cpp:(.text+0x9a4): multiple definition of `COvertimeHandler::handleVacationNewL(MObjectProvider*, MReloadable*)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0x9a4): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o: In function `COvertimeHandler::handleVacationDeleteL(MObjectProvider*, MReloadable*)':
+Overtimehandler.cpp:(.text+0xa48): multiple definition of `COvertimeHandler::handleVacationDeleteL(MObjectProvider*, MReloadable*)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp:(.text+0xa48): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:(.rodata+0x64): multiple definition of `typeinfo for COvertimeHandler'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:(.rodata+0x64): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:(.rodata+0x50): multiple definition of `typeinfo name for COvertimeHandler'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:(.rodata+0x50): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o: In function `CMyContainer::CMyContainer(CDataKeeper*)':
+Mycontainer.cpp:(.text+0x0): multiple definition of `CMyContainer::CMyContainer(CDataKeeper*)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp:(.text+0x0): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:(.rodata+0x0): multiple definition of `vtable for CMyContainer'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:(.rodata+0x0): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o: In function `CMyContainer::CMyContainer(CDataKeeper*)':
+Mycontainer.cpp:(.text+0x5c): multiple definition of `CMyContainer::CMyContainer(CDataKeeper*)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp:(.text+0x5c): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o: In function `CMyContainer::~CMyContainer()':
+Mycontainer.cpp:(.text+0xb8): multiple definition of `CMyContainer::~CMyContainer()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp:(.text+0xb8): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o: In function `CMyContainer::~CMyContainer()':
+Mycontainer.cpp:(.text+0x144): multiple definition of `CMyContainer::~CMyContainer()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp:(.text+0x144): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o: In function `CMyContainer::~CMyContainer()':
+Mycontainer.cpp:(.text+0x1d0): multiple definition of `CMyContainer::~CMyContainer()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp:(.text+0x1d0): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o: In function `CMyContainer::BaseContainerConstructL()':
+Mycontainer.cpp:(.text+0x264): multiple definition of `CMyContainer::BaseContainerConstructL()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp:(.text+0x264): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o: In function `CMyContainer::getDataKeeper() const':
+Mycontainer.cpp:(.text+0x268): multiple definition of `CMyContainer::getDataKeeper() const'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp:(.text+0x268): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o: In function `CMyContainer::handleSizeChanged(TRect const&)':
+Mycontainer.cpp:(.text+0x270): multiple definition of `CMyContainer::handleSizeChanged(TRect const&)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp:(.text+0x270): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o: In function `CMyContainer::CountComponentControls() const':
+Mycontainer.cpp:(.text+0x284): multiple definition of `CMyContainer::CountComponentControls() const'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp:(.text+0x284): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o: In function `CMyContainer::ComponentControl(int) const':
+Mycontainer.cpp:(.text+0x29c): multiple definition of `CMyContainer::ComponentControl(int) const'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp:(.text+0x29c): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o: In function `CMyContainer::addControlL(CCoeControl*)':
+Mycontainer.cpp:(.text+0x2c8): multiple definition of `CMyContainer::addControlL(CCoeControl*)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp:(.text+0x2c8): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o: In function `CMyContainer::removeControl(CCoeControl*)':
+Mycontainer.cpp:(.text+0x318): multiple definition of `CMyContainer::removeControl(CCoeControl*)'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp:(.text+0x318): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o: In function `CMyContainer::resetControls()':
+Mycontainer.cpp:(.text+0x3a8): multiple definition of `CMyContainer::resetControls()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp:(.text+0x3a8): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o: In function `CMyContainer::handleBeforeDestruction()':
+Mycontainer.cpp:(.text+0x3c8): multiple definition of `CMyContainer::handleBeforeDestruction()'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp:(.text+0x3c8): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o: In function `CMyContainer::isDestructing() const':
+Mycontainer.cpp:(.text+0x3f0): multiple definition of `CMyContainer::isDestructing() const'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp:(.text+0x3f0): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:(.rodata+0x118): multiple definition of `typeinfo for CMyContainer'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:(.rodata+0x118): first defined here
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:(.rodata+0x108): multiple definition of `typeinfo name for CMyContainer'
+..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:(.rodata+0x108): first defined here
+make[1]: *** [..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\RELEASE\GCCE\UREL\P2GData_A00001CD.dll] Error 1
+make: *** [TARGETP2GDATACLASSES] Error 2
+make -j 4 -s  -C \Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3 -f "PROGRAMICON.MK" TO_ROOT=..\..\..\..\.. EPOCBLD=..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\PROGRAMICON\GCCE TO_BLDINF=..\..\..\..\..\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3 PLATFORM=GCCE CFG=UREL BLD
+make -j 4 -s  -C \Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3 -f "PROGRAMGRAPHICS.MK" TO_ROOT=..\..\..\..\.. EPOCBLD=..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\PROGRAMGRAPHICS\GCCE TO_BLDINF=..\..\..\..\..\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3 PLATFORM=GCCE CFG=UREL BLD
+make -j 4 -s  -r -f "\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GCOMMON\GCCE\P2GCOMMON.GCCE" UREL
+make -j 4 -s  -r -f "\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GSERVER\GCCE\P2GSERVER.GCCE" UREL
+make -j 4 -s  -r -f "\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\P2GDATACLASSES.GCCE" UREL
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/bugzilla/6417.gcce.regression.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,244 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<root>
+  <!--Error Marker at index 0-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::NewL(CDataKeeper&amp;)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 1-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 2-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::COvertimeHandler(CDataKeeper&amp;)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 3-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 4-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::ConstructL()'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 5-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 6-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::COvertimeHandler(CDataKeeper&amp;)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 7-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 8-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::restoreDefaultValues()'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 9-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 10-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:(.rodata+0x0): multiple definition of `vtable for COvertimeHandler'" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 11-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:(.rodata+0x0): first defined here" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 12-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::~COvertimeHandler()'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 13-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 14-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::~COvertimeHandler()'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 15-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 16-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::~COvertimeHandler()'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 17-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 18-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::save(MSettingsStorage&amp;)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 19-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 20-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::load(MSettingsStorage&amp;)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 21-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 22-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::handleViewActivated()'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 23-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 24-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::handleViewDeactivated()'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 25-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 26-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::handleWentBackground()'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 27-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 28-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::handleWentForeground()'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 29-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 30-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::getOvertimeEngine()'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 31-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 32-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::getPunchEngine()'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 33-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 34-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::getSelectedHolidayId() const'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 35-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 36-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::getSelectedHolidayObject()'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 37-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 38-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::getEditHolidayObject()'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 39-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 40-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::getSelectedVacationId() const'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 41-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 42-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::getSelectedVacationObject()'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 43-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 44-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::getEditVacationObject()'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 45-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 46-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::getStartStatistics() const'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 47-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 48-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::getEndStatistics() const'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 49-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 50-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::getStartResult() const'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 51-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 52-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::getWorkHours() const'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 53-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 54-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::setSelectedHolidayId(int)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 55-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 56-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::setSelectedVacationId(int)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 57-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 58-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::setStartStatistics(TTime const&amp;)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 59-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 60-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::setEndStatistics(TTime const&amp;)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 61-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 62-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::setStartResult(int)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 63-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 64-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::setWorkHours(int)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 65-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 66-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::handleHolidayEditL(MObjectProvider*, MReloadable*)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 67-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 68-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::canModifyObject(TBOBase const*)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 69-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 70-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::handleHolidayNewL(MObjectProvider*, MReloadable*)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 71-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 72-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::handleHolidayDeleteL(MObjectProvider*, MReloadable*)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 73-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 74-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::handleVacationEditL(MObjectProvider*, MReloadable*)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 75-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 76-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::handleVacationNewL(MObjectProvider*, MReloadable*)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 77-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 78-->
+  <marker_info file="^EMPTY^" line_number="0" message="Overtimehandler.cpp: multiple definition of `COvertimeHandler::handleVacationDeleteL(MObjectProvider*, MReloadable*)'" severity="2" variable_name="^EMPTY^" external_path_string="Overtimehandler.cpp:" />
+  <!--Error Marker at index 79-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:Overtimehandler.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/OvertimeHandler.o:Overtimehandler.cpp:" />
+  <!--Error Marker at index 80-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:(.rodata+0x64): multiple definition of `typeinfo for COvertimeHandler'" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 81-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:(.rodata+0x64): first defined here" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 82-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:(.rodata+0x50): multiple definition of `typeinfo name for COvertimeHandler'" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 83-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\OvertimeHandler.o:(.rodata+0x50): first defined here" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 84-->
+  <marker_info file="^EMPTY^" line_number="0" message="Mycontainer.cpp: multiple definition of `CMyContainer::CMyContainer(CDataKeeper*)'" severity="2" variable_name="^EMPTY^" external_path_string="Mycontainer.cpp:" />
+  <!--Error Marker at index 85-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/MyContainer.o:Mycontainer.cpp:" />
+  <!--Error Marker at index 86-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:(.rodata+0x0): multiple definition of `vtable for CMyContainer'" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 87-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:(.rodata+0x0): first defined here" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 88-->
+  <marker_info file="^EMPTY^" line_number="0" message="Mycontainer.cpp: multiple definition of `CMyContainer::CMyContainer(CDataKeeper*)'" severity="2" variable_name="^EMPTY^" external_path_string="Mycontainer.cpp:" />
+  <!--Error Marker at index 89-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/MyContainer.o:Mycontainer.cpp:" />
+  <!--Error Marker at index 90-->
+  <marker_info file="^EMPTY^" line_number="0" message="Mycontainer.cpp: multiple definition of `CMyContainer::~CMyContainer()'" severity="2" variable_name="^EMPTY^" external_path_string="Mycontainer.cpp:" />
+  <!--Error Marker at index 91-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/MyContainer.o:Mycontainer.cpp:" />
+  <!--Error Marker at index 92-->
+  <marker_info file="^EMPTY^" line_number="0" message="Mycontainer.cpp: multiple definition of `CMyContainer::~CMyContainer()'" severity="2" variable_name="^EMPTY^" external_path_string="Mycontainer.cpp:" />
+  <!--Error Marker at index 93-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/MyContainer.o:Mycontainer.cpp:" />
+  <!--Error Marker at index 94-->
+  <marker_info file="^EMPTY^" line_number="0" message="Mycontainer.cpp: multiple definition of `CMyContainer::~CMyContainer()'" severity="2" variable_name="^EMPTY^" external_path_string="Mycontainer.cpp:" />
+  <!--Error Marker at index 95-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/MyContainer.o:Mycontainer.cpp:" />
+  <!--Error Marker at index 96-->
+  <marker_info file="^EMPTY^" line_number="0" message="Mycontainer.cpp: multiple definition of `CMyContainer::BaseContainerConstructL()'" severity="2" variable_name="^EMPTY^" external_path_string="Mycontainer.cpp:" />
+  <!--Error Marker at index 97-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/MyContainer.o:Mycontainer.cpp:" />
+  <!--Error Marker at index 98-->
+  <marker_info file="^EMPTY^" line_number="0" message="Mycontainer.cpp: multiple definition of `CMyContainer::getDataKeeper() const'" severity="2" variable_name="^EMPTY^" external_path_string="Mycontainer.cpp:" />
+  <!--Error Marker at index 99-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/MyContainer.o:Mycontainer.cpp:" />
+  <!--Error Marker at index 100-->
+  <marker_info file="^EMPTY^" line_number="0" message="Mycontainer.cpp: multiple definition of `CMyContainer::handleSizeChanged(TRect const&amp;)'" severity="2" variable_name="^EMPTY^" external_path_string="Mycontainer.cpp:" />
+  <!--Error Marker at index 101-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/MyContainer.o:Mycontainer.cpp:" />
+  <!--Error Marker at index 102-->
+  <marker_info file="^EMPTY^" line_number="0" message="Mycontainer.cpp: multiple definition of `CMyContainer::CountComponentControls() const'" severity="2" variable_name="^EMPTY^" external_path_string="Mycontainer.cpp:" />
+  <!--Error Marker at index 103-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/MyContainer.o:Mycontainer.cpp:" />
+  <!--Error Marker at index 104-->
+  <marker_info file="^EMPTY^" line_number="0" message="Mycontainer.cpp: multiple definition of `CMyContainer::ComponentControl(int) const'" severity="2" variable_name="^EMPTY^" external_path_string="Mycontainer.cpp:" />
+  <!--Error Marker at index 105-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/MyContainer.o:Mycontainer.cpp:" />
+  <!--Error Marker at index 106-->
+  <marker_info file="^EMPTY^" line_number="0" message="Mycontainer.cpp: multiple definition of `CMyContainer::addControlL(CCoeControl*)'" severity="2" variable_name="^EMPTY^" external_path_string="Mycontainer.cpp:" />
+  <!--Error Marker at index 107-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/MyContainer.o:Mycontainer.cpp:" />
+  <!--Error Marker at index 108-->
+  <marker_info file="^EMPTY^" line_number="0" message="Mycontainer.cpp: multiple definition of `CMyContainer::removeControl(CCoeControl*)'" severity="2" variable_name="^EMPTY^" external_path_string="Mycontainer.cpp:" />
+  <!--Error Marker at index 109-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/MyContainer.o:Mycontainer.cpp:" />
+  <!--Error Marker at index 110-->
+  <marker_info file="^EMPTY^" line_number="0" message="Mycontainer.cpp: multiple definition of `CMyContainer::resetControls()'" severity="2" variable_name="^EMPTY^" external_path_string="Mycontainer.cpp:" />
+  <!--Error Marker at index 111-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/MyContainer.o:Mycontainer.cpp:" />
+  <!--Error Marker at index 112-->
+  <marker_info file="^EMPTY^" line_number="0" message="Mycontainer.cpp: multiple definition of `CMyContainer::handleBeforeDestruction()'" severity="2" variable_name="^EMPTY^" external_path_string="Mycontainer.cpp:" />
+  <!--Error Marker at index 113-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/MyContainer.o:Mycontainer.cpp:" />
+  <!--Error Marker at index 114-->
+  <marker_info file="^EMPTY^" line_number="0" message="Mycontainer.cpp: multiple definition of `CMyContainer::isDestructing() const'" severity="2" variable_name="^EMPTY^" external_path_string="Mycontainer.cpp:" />
+  <!--Error Marker at index 115-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:Mycontainer.cpp: first defined here" severity="2" variable_name="^EMPTY^" external_path_string="../../../../../Symbian/9.1/S60_3rd_MR/EPOC32/BUILD/Carb13rc2/Workspace-P2G-3/Punch2Go-S60-3/Punch2Go/CS60-3/P2GDATACLASSES/GCCE/UREL/MyContainer.o:Mycontainer.cpp:" />
+  <!--Error Marker at index 116-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:(.rodata+0x118): multiple definition of `typeinfo for CMyContainer'" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 117-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:(.rodata+0x118): first defined here" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 118-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:(.rodata+0x108): multiple definition of `typeinfo name for CMyContainer'" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 119-->
+  <marker_info file="^EMPTY^" line_number="0" message="..\..\..\..\..\Symbian\9.1\S60_3rd_MR\EPOC32\BUILD\Carb13rc2\Workspace-P2G-3\Punch2Go-S60-3\Punch2Go\CS60-3\P2GDATACLASSES\GCCE\UREL\MyContainer.o:(.rodata+0x108): first defined here" severity="2" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+</root>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/gnu_as.input.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,2 @@
+/Symbian/Carbide/workspace/test/src/Foo.s: Assembler messages:
+/Symbian/Carbide/workspace/test/src/Foo.s:13: Warning: ignoring redefinition of register alias 'WIDTH'
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/gnu_as.regression.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,5 @@
+<root>
+<!--Error Marker at index 0-->
+<marker_info external_path_string="/Symbian/Carbide/workspace/test/src/Foo.s" file="^EMPTY^" line_number="13" message="/Symbian/Carbide/workspace/test/src/Foo.s ignoring redefinition of register alias 'WIDTH'" severity="1" variable_name="^EMPTY^"/>
+</root>
+
--- a/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/makmake.errors.regression.1.xml	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cdt.builder.test/data/errorpatterns/makmake.errors.regression.1.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -1,18 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <root>
-<!--Error Marker at index 0-->
-<marker_info external_path_string="/APPS/Nokia/DDB21Nightly/workspace/ListBox/group/LISTBOX.MMP" file="^EMPTY^" line_number="2" message="Unrecognised Keyword &quot;TARGE&quot;[\APPS\Nokia\DDB21Nightly\workspace\ListBox\group\LISTBOX.MMP]" severity="1" variable_name="^EMPTY^"/>
-<!--Error Marker at index 1-->
-<marker_info external_path_string="^EMPTY^" file="^EMPTY^" line_number="-1" message="ERROR: No Target specified" severity="3" variable_name="^EMPTY^"/>
-<!--Error Marker at index 2-->
-<marker_info external_path_string="/APPS/Nokia/DDB21Nightly/workspace/ListBox/group/LISTBOX.MMP" file="^EMPTY^" line_number="11" message="SOURCEPATH &quot;\APPS\Nokia\DDB21Nightly\workspace\ListBox\datx\&quot; not found[\APPS\Nokia\DDB21Nightly\workspace\ListBox\group\LISTBOX.MMP]" severity="1" variable_name="^EMPTY^"/>
-<!--Error Marker at index 3-->
-<marker_info external_path_string="/APPS/Nokia/DDB21Nightly/workspace/ListBox/group/LISTBOX.MMP" file="^EMPTY^" line_number="6" message="Stack size doesn't fit expected number format[\APPS\Nokia\DDB21Nightly\workspace\ListBox\group\LISTBOX.MMP]" severity="3" variable_name="^EMPTY^"/>
-<!--Error Marker at index 4-->
-<marker_info external_path_string="/APPS/Nokia/DDB21Nightly/workspace/ListBox/group/LISTBOX.MMP" file="^EMPTY^" line_number="42" message="BITMAP color depth &quot;listboxlistbox.cpp&quot; - unexpected format[\APPS\Nokia\DDB21Nightly\workspace\ListBox\group\LISTBOX.MMP]" severity="3" variable_name="^EMPTY^"/>
-<!--Error Marker at index 5-->
-<marker_info external_path_string="^EMPTY^" file="^EMPTY^" line_number="-1" message="ERROR: No Sources specified" severity="3" variable_name="^EMPTY^"/>
-<!--Error Marker at index 6-->
-<marker_info external_path_string="^EMPTY^" file="^EMPTY^" line_number="-1" message="ERROR: No Sources specified" severity="3" variable_name="^EMPTY^"/>
-<!--Error Marker at index 7-->
-<marker_info external_path_string="X:/SWATI_Symbian_Tools/Trace/TraceCore/group2/BLD.INF" file="^EMPTY^" line_number="59" message="#error test[X:\SWATI_Symbian_Tools\Trace\TraceCore\group2\BLD.INF]" severity="3" variable_name="^EMPTY^"/>
+  <!--Error Marker at index 0-->
+  <marker_info file="^EMPTY^" line_number="2" message="Unrecognised Keyword &quot;TARGE&quot;[\APPS\Nokia\DDB21Nightly\workspace\ListBox\group\LISTBOX.MMP]" severity="1" variable_name="^EMPTY^" external_path_string="/APPS/Nokia/DDB21Nightly/workspace/ListBox/group/LISTBOX.MMP" />
+  <!--Error Marker at index 1-->
+  <marker_info file="^EMPTY^" line_number="-1" message="ERROR: No Target specified" severity="3" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 2-->
+  <marker_info file="^EMPTY^" line_number="11" message="SOURCEPATH &quot;\APPS\Nokia\DDB21Nightly\workspace\ListBox\datx\&quot; not found[\APPS\Nokia\DDB21Nightly\workspace\ListBox\group\LISTBOX.MMP]" severity="1" variable_name="^EMPTY^" external_path_string="/APPS/Nokia/DDB21Nightly/workspace/ListBox/group/LISTBOX.MMP" />
+  <!--Error Marker at index 3-->
+  <marker_info file="^EMPTY^" line_number="6" message="Stack size doesn't fit expected number format[\APPS\Nokia\DDB21Nightly\workspace\ListBox\group\LISTBOX.MMP]" severity="3" variable_name="^EMPTY^" external_path_string="/APPS/Nokia/DDB21Nightly/workspace/ListBox/group/LISTBOX.MMP" />
+  <!--Error Marker at index 4-->
+  <marker_info file="^EMPTY^" line_number="42" message="BITMAP color depth &quot;listboxlistbox.cpp&quot; - unexpected format[\APPS\Nokia\DDB21Nightly\workspace\ListBox\group\LISTBOX.MMP]" severity="3" variable_name="^EMPTY^" external_path_string="/APPS/Nokia/DDB21Nightly/workspace/ListBox/group/LISTBOX.MMP" />
+  <!--Error Marker at index 5-->
+  <marker_info file="^EMPTY^" line_number="-1" message="ERROR: No Sources specified" severity="3" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 6-->
+  <marker_info file="^EMPTY^" line_number="-1" message="ERROR: No Sources specified" severity="3" variable_name="^EMPTY^" external_path_string="^EMPTY^" />
+  <!--Error Marker at index 7-->
+  <marker_info file="^EMPTY^" line_number="59" message="X:\SWATI_Symbian_Tools\Trace\TraceCore\group2\BLD.INF #error test" severity="2" variable_name="^EMPTY^" external_path_string="X:/SWATI_Symbian_Tools/Trace/TraceCore/group2/BLD.INF" />
 </root>
+
--- a/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/errorParsers/AllTests.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/errorParsers/AllTests.java	Mon Apr 27 15:07:35 2009 -0500
@@ -27,6 +27,9 @@
 		//$JUnit-BEGIN$
 		suite.addTestSuite(TestRVCTErrorParser.class);
 		suite.addTestSuite(TestMakmakeErrorParser.class);
+		suite.addTestSuite(TestSBSv2ErrorParser.class);
+		suite.addTestSuite(TestGcceErrorParser.class);
+		suite.addTestSuite(TestMakeErrorParser.class);
 		//$JUnit-END$
 		return suite;
 	}
--- a/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/errorParsers/CarbideErrorParserTestHarness.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/errorParsers/CarbideErrorParserTestHarness.java	Mon Apr 27 15:07:35 2009 -0500
@@ -27,37 +27,32 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.PrintStream;
-import java.io.StringWriter;
 import java.util.ArrayList;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
+import java.util.List;
 
 import junit.framework.Assert;
 
 import org.eclipse.cdt.core.ProblemMarkerInfo;
+import org.eclipse.cdt.core.model.ICModelMarker;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
-import org.w3c.dom.Comment;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
+import org.jdom.Attribute;
+import org.jdom.Comment;
+import org.jdom.DefaultJDOMFactory;
+import org.jdom.Document;
+import org.jdom.Element;
+import org.jdom.JDOMException;
+import org.jdom.filter.ElementFilter;
+import org.jdom.input.SAXBuilder;
+import org.jdom.output.Format;
+import org.jdom.output.XMLOutputter;
 
 import com.nokia.carbide.cdt.builder.builder.CarbideCommandLauncher;
+import com.nokia.carbide.cdt.builder.test.TestPlugin;
+import com.nokia.cpp.internal.api.utils.core.FileUtils;
 
 public class CarbideErrorParserTestHarness extends CarbideCommandLauncher {
 	static final String EMPTY = "^EMPTY^";
@@ -72,6 +67,7 @@
 	IProject project;
 	ArrayList<ProblemMarkerInfo> ideProblemMarkerInfoList;
 	ArrayList<ProblemMarkerInfo> xmlFilePromblemMarkerInfoList;
+	boolean debug = false;
 	
 	public CarbideErrorParserTestHarness(IProject project, 
 			  IProgressMonitor monitor, 
@@ -117,9 +113,15 @@
 		// pick out the stdout stream directly, where CDT error parser sniff
 		// for error messages from build console
 		try {
+			stdoutStream.getProject().deleteMarkers(ICModelMarker.C_MODEL_PROBLEM_MARKER, true, IResource.DEPTH_INFINITE); // clear UI list before we start
+			stdoutStream.clearScratchBuffer();	// some error parser do multiple lines
+			consoleOutput += "\n";	// force the input file to flush all lines
 			stdoutStream.write(consoleOutput.getBytes());
+			stdoutStream.flush();
 		} catch (IOException e) {
 			Assert.fail();
+		} catch (CoreException e) {
+			Assert.fail();
 		}
 	}
 	
@@ -174,6 +176,16 @@
 		readControlXML(xmlInputStream);
 		
 		if (ideProblemMarkerInfoList.size() != xmlFilePromblemMarkerInfoList.size()) {
+			if (debug) {
+				java.io.File file;
+				try {
+					file = FileUtils.pluginRelativeFile(TestPlugin.getDefault(), "data/currentOutput.xml");
+					writeRegressionXMLFile(new java.io.PrintStream(file));
+				} catch (IOException e) {
+					// TODO Auto-generated catch block
+					e.printStackTrace();
+				}
+			}
 			Assert.fail("IDE contains " + ideProblemMarkerInfoList.size() + " markers and Control file contains " + xmlFilePromblemMarkerInfoList.size());
 			return false;
 		}
@@ -252,18 +264,20 @@
 	// read control case from a XML file and setup internal list
 	public void readControlXML(InputStream xmlInputStream) {
 		try {
-			DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
-	        DocumentBuilder docBuilder;
-			docBuilder = dbfac.newDocumentBuilder();
-	        Document doc = docBuilder.parse(xmlInputStream);
-	        doc.getDocumentElement().normalize();
+	        SAXBuilder docBuilder = new SAXBuilder();
+	        Document doc = docBuilder.build(xmlInputStream);
 
-	        NodeList markerNodeList = doc.getElementsByTagName(MARKER_INFO);
-	        int markerNodeListSize = markerNodeList.getLength();
+	        Element root = doc.getRootElement();
+	        ElementFilter elementFilter = new ElementFilter(MARKER_INFO);
+
+	        List<?> allMarkerInfo = root.getContent(elementFilter);
 	        
 	        xmlFilePromblemMarkerInfoList.clear();
 	        
-	        for (int i = 0; i < markerNodeListSize; i++) {
+	        int markerInfoListSize = allMarkerInfo.size();
+	        
+	        for (int i = 0; i < markerInfoListSize; i++) {
+	        	Object info = allMarkerInfo.get(i);
 	        	IResource file = null;
 	        	int lineNumber;
 	        	String description;
@@ -271,31 +285,29 @@
 	        	String variableName;
 	        	IPath externalPath;
 	        	
-	        	Node markerNode = markerNodeList.item(i);
-		        NamedNodeMap attributes = markerNode.getAttributes();
+	        	Assert.assertTrue(info instanceof Element);
+	        	Element markerInfo = (Element)info;
 		        
-		        Node locationNode = attributes.getNamedItem(LINE_NUMBER);
-		        lineNumber = Integer.parseInt(locationNode.getNodeValue());
+		        Attribute locationNode = markerInfo.getAttribute(LINE_NUMBER);
+		        lineNumber = Integer.parseInt(locationNode.getValue());
 
-		        Node messageNode = attributes.getNamedItem(MESSAGE);
-		        description = messageNode.getNodeValue();
+		        Attribute messageNode = markerInfo.getAttribute(MESSAGE);
+		        description = messageNode.getValue();
 		        
-		        Node severityNode = attributes.getNamedItem(SEVERITY);
-		        severity = Integer.parseInt(severityNode.getNodeValue());
+		        Attribute severityNode = markerInfo.getAttribute(SEVERITY);
+		        severity = Integer.parseInt(severityNode.getValue());
 
-		        Node variableNameNode = attributes.getNamedItem(VARIABLE_NAME);
-		        variableName = variableNameNode.getNodeValue();
+		        Attribute variableNameNode = markerInfo.getAttribute(VARIABLE_NAME);
+		        variableName = variableNameNode.getValue();
 		        
-		        Node externalPathStringNode = attributes.getNamedItem(EXTERNAL_PATH_STRING);
-		        externalPath = new Path(externalPathStringNode.getNodeValue());		        
+		        Attribute externalPathStringNode = markerInfo.getAttribute(EXTERNAL_PATH_STRING);
+		        externalPath = new org.eclipse.core.runtime.Path(externalPathStringNode.getValue());		        
 
 	        	ProblemMarkerInfo details = new ProblemMarkerInfo(file, lineNumber, description, severity, variableName, externalPath);
 	        	xmlFilePromblemMarkerInfoList.add(details);
 
 	        }
-		} catch (ParserConfigurationException e) {
-			Assert.fail();
-		} catch (SAXException e) {
+		} catch (JDOMException e) {
 			Assert.fail();
 		} catch (IOException e) {
 			Assert.fail();
@@ -312,29 +324,22 @@
 	 */
 	public void writeRegressionXMLFile(PrintStream printStream) {		
 		try {
-			
-			// prepare XML tree
-	        DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
-	        DocumentBuilder docBuilder;
-
-			docBuilder = dbfac.newDocumentBuilder();
-	        Document doc = docBuilder.newDocument();
-
-	        Element root = doc.createElement("root");
-	        doc.appendChild(root);
+	        DefaultJDOMFactory jdomFactory = new DefaultJDOMFactory();
+	        Document jdomdoc = jdomFactory.document(jdomFactory.element("root"));
+	        Element root = jdomdoc.getRootElement();
 	        
 	        int index = 0;
-
-			for (ProblemMarkerInfo marker : ideProblemMarkerInfoList)
-			{
-		        Element child = doc.createElement(MARKER_INFO);
-		        Comment comment = doc.createComment("Error Marker at index " + index);
-		        ++index;
-
+	        for (ProblemMarkerInfo marker : ideProblemMarkerInfoList)
+	        {
+	        	Element child = jdomFactory.element(MARKER_INFO);
+	        	Comment comment = jdomFactory.comment("Error Marker at index " + index);
+	        	++index;
+	        	
 		        /* CarbideCommandLauncher.addMarker() does not set file
 		        file = marker.getAttribute(IMarker.LOCATION, 0);
 				child.setAttribute(LOCATION, new Integer(file).toString()); 
 		         */
+	        	
 		        child.setAttribute(FILE, EMPTY); // file
 				child.setAttribute(LINE_NUMBER, new Integer(marker.lineNumber).toString());
 				String description;
@@ -360,34 +365,21 @@
 				}
 				child.setAttribute(EXTERNAL_PATH_STRING, externalPathString);
 				
-				root.appendChild(comment);
-		        root.appendChild(child);
-			}
+				root.addContent(comment);
+				root.addContent(child);
+	        }
 
-	        // print
-	        TransformerFactory transfac = TransformerFactory.newInstance();
-	        Transformer trans = transfac.newTransformer();
-	        trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
-	        trans.setOutputProperty(OutputKeys.INDENT, "yes");
-
-	        // create string from xml tree
-	        StringWriter sw = new StringWriter();
-	        StreamResult result = new StreamResult(sw);
-	        DOMSource source = new DOMSource(doc);
-	        trans.transform(source, result);
-	        String xmlString = sw.toString();
+			// drop JAXP for JDOM
+			XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
+			outputter.output(jdomdoc, printStream);
 
 	        // print xml
-	        printStream.println(xmlString);
 	        printStream.flush();
 	        printStream.close();
         
-		} catch (ParserConfigurationException e) {
-			Assert.fail();
-		} catch (TransformerConfigurationException e) {
-			Assert.fail();
-		} catch (TransformerException e) {
-			Assert.fail();
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			e.printStackTrace();
 		}
 
 	}
--- a/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/errorParsers/ErrorParserRegressionGenerator.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/errorParsers/ErrorParserRegressionGenerator.java	Mon Apr 27 15:07:35 2009 -0500
@@ -21,23 +21,30 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import junit.framework.TestCase;
-
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.NullProgressMonitor;
 
+import com.nokia.carbide.automation.utils.UITestCase;
 import com.nokia.carbide.cdt.builder.CarbideBuilderPlugin;
 import com.nokia.carbide.cdt.builder.builder.CarbideCPPBuilder;
 import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
 import com.nokia.carbide.cdt.builder.project.ICarbideProjectInfo;
 import com.nokia.carbide.cdt.builder.test.TestPlugin;
-import com.nokia.carbide.cpp.internal.api.sdk.SymbianBuildContext;
 import com.nokia.carbide.cpp.project.core.ProjectCorePlugin;
-import com.nokia.carbide.cpp.sdk.core.*;
+import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
 import com.nokia.cpp.internal.api.utils.core.FileUtils;
 
-public class ErrorParserRegressionGenerator extends TestCase {
+public class ErrorParserRegressionGenerator extends UITestCase {
+	public ErrorParserRegressionGenerator(String name) {
+		super(name);
+		// TODO Auto-generated constructor stub
+	}
+
 	private static final String PROJECT_NAME = "TestErrorParser";
+	// Platform matters, set this before you build
+	private static final String PLATFORM_STRING = ISymbianBuildContext.EMULATOR_PLATFORM;
 
 	CarbideErrorParserTestHarness harness;
 	private IProject project;
@@ -46,11 +53,24 @@
 		super.setUp();
 		project = ProjectCorePlugin.createProject(PROJECT_NAME, null);
 		
+		// look for first SDK with the platform
+		List<ISymbianBuildContext> contextList = new ArrayList<ISymbianBuildContext>();
 		// You need to set the proper default configuration so the correct set of error parsers is called
-		ISymbianSDK sdk = SDKCorePlugin.getSDKManager().getSDKList().get(0);
-		ISymbianBuildContext context = new SymbianBuildContext(sdk, ISymbianBuildContext.ARMV5_PLATFORM, ISymbianBuildContext.DEBUG_TARGET);
-		List<ISymbianBuildContext> contextList = new ArrayList<ISymbianBuildContext>();
-		contextList.add(context);
+		List<ISymbianSDK> sdkList = SDKCorePlugin.getSDKManager().getSDKList();
+		for (ISymbianSDK currSDK : sdkList){
+			List<ISymbianBuildContext> contexts = currSDK.getUnfilteredBuildConfigurations();
+			for (ISymbianBuildContext context : contexts) {
+				if (context.getPlatformString().equals(PLATFORM_STRING)) {
+					contextList.add(context);
+					break;
+				}
+			}
+			if (contextList.size() > 0) {
+				break;
+			}
+		}
+
+		assertTrue(contextList.size() > 0);		// this means you don't have any SDK installe with the said platform
 		
 //		ProjectCorePlugin.postProjectCreatedActions(project, "group/bld.inf", 
 //				TestPlugin.getUsableBuildConfigs(), new ArrayList<String>(), 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/errorParsers/TestGcceErrorParser.java	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,138 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+package com.nokia.carbide.cdt.builder.test.errorParsers;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import com.nokia.carbide.automation.utils.UITestCase;
+import com.nokia.carbide.automation.utils.debugger.DebuggerTestCaseParameters;
+import com.nokia.carbide.cdt.builder.CarbideBuilderPlugin;
+import com.nokia.carbide.cdt.builder.builder.CarbideCPPBuilder;
+import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
+import com.nokia.carbide.cdt.builder.project.ICarbideProjectInfo;
+import com.nokia.carbide.cdt.builder.test.TestPlugin;
+import com.nokia.carbide.cpp.project.core.ProjectCorePlugin;
+import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
+import com.nokia.cpp.internal.api.utils.core.FileUtils;
+
+public class TestGcceErrorParser extends UITestCase implements DebuggerTestCaseParameters {
+
+	public TestGcceErrorParser(String name) {
+		super(name);
+		// TODO Auto-generated constructor stub
+	}
+
+	private static final String PROJECT_NAME = "TestGcceErrorParser";
+	private static final String PROJECT_PATH = "group/bld.inf";
+	
+	CarbideErrorParserTestHarness harness;
+	private IProject project;
+	
+	protected void setUp() throws Exception {
+		super.setUp();
+		project = ProjectCorePlugin.createProject(PROJECT_NAME, null);
+		List<ISymbianBuildContext> contextList = new ArrayList<ISymbianBuildContext>();
+		
+		// You need to set the proper default configuration so the correct set of error parsers is called
+		List<ISymbianSDK> sdkList = SDKCorePlugin.getSDKManager().getSDKList();
+		for (ISymbianSDK currSDK : sdkList){
+			List<ISymbianBuildContext> contexts = currSDK.getUnfilteredBuildConfigurations();
+			for (ISymbianBuildContext context : contexts) {
+				if (context.getPlatformString().equals(ISymbianBuildContext.GCCE_PLATFORM)) {
+					contextList.add(context);
+					break;
+				}
+			}
+			if (contextList.size() > 0) {
+				break;
+			}
+		}
+		
+		assertTrue(contextList.size() > 0);		// if this fail, you don't have any SDK installed supporting GCCE
+		
+		ProjectCorePlugin.postProjectCreatedActions(project, PROJECT_PATH, 
+				contextList, new ArrayList<String>(), 
+				"Debug MMP", null, new NullProgressMonitor());
+		
+		ICarbideProjectInfo cpi = CarbideBuilderPlugin.getBuildManager().getProjectInfo(project);
+		ICarbideBuildConfiguration buildConfig = cpi.getDefaultConfiguration();
+		harness = new CarbideErrorParserTestHarness(project, 
+												new NullProgressMonitor(),
+												CarbideCPPBuilder.getParserIdArray(buildConfig.getErrorParserId()), 
+												cpi.getINFWorkingDirectory());
+	}
+	
+	protected void tearDown() throws Exception {
+		project.delete(true, null);
+		super.tearDown();
+	}
+	
+	/**
+	 * Test for assembler errors/warnings
+	 */
+	/*
+	public void testGnuAsMessages() {
+		//argument 1 is console output you get from the tool
+		//argument 2 is control XML with the marker data
+		try {
+			harness.parseStringAndTestAgainstXML(FileUtils.pluginRelativeFile(TestPlugin.getDefault(), "data/errorpatterns/gnu_as.input.txt"), 
+												FileUtils.pluginRelativeFile(TestPlugin.getDefault(), "data/errorpatterns/gnu_as.regression.xml"));
+		} catch (IOException e) {
+			fail();
+		}
+	}
+	*/
+	
+	/*
+	 * Test for AbstractGCCErrorParser
+	 */
+	public void testAbstractGCCErrorParser() {
+		//argument 1 is console output you get from the tool
+		//argument 2 is control XML with the marker data
+		try {
+			harness.parseStringAndTestAgainstXML(FileUtils.pluginRelativeFile(TestPlugin.getDefault(), "data/errorpatterns/abstractgcce.input.txt"), 
+												FileUtils.pluginRelativeFile(TestPlugin.getDefault(), "data/errorpatterns/abstractgcce.regression.xml"));
+		} catch (IOException e) {
+			fail();
+		}
+	}
+
+	/**
+	 * Regress Bugzilla issues by entries
+	 */
+	public void testBugzillaRegression() {
+		final String reportID[] = {"2969", "4541", "5618", "5824", "6417"};
+		//argument 1 is console output you get from the tool
+		//argument 2 is control XML with the marker data
+		try {
+			for (int i = 0; i < reportID.length; i++) {
+				harness.parseStringAndTestAgainstXML(FileUtils.pluginRelativeFile(TestPlugin.getDefault(), "data/errorpatterns/bugzilla/" + reportID[i] +".gcce.input.txt"), 
+						FileUtils.pluginRelativeFile(TestPlugin.getDefault(), "data/errorpatterns/bugzilla/" + reportID[i] +".gcce.regression.xml"));
+			}
+		} catch (IOException e) {
+			fail();
+		}
+	}
+	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/errorParsers/TestMakeErrorParser.java	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,107 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+package com.nokia.carbide.cdt.builder.test.errorParsers;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.NullProgressMonitor;
+
+import com.nokia.carbide.automation.utils.UITestCase;
+import com.nokia.carbide.cdt.builder.CarbideBuilderPlugin;
+import com.nokia.carbide.cdt.builder.builder.CarbideCPPBuilder;
+import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
+import com.nokia.carbide.cdt.builder.project.ICarbideProjectInfo;
+import com.nokia.carbide.cdt.builder.test.TestPlugin;
+import com.nokia.carbide.cpp.project.core.ProjectCorePlugin;
+import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
+import com.nokia.cpp.internal.api.utils.core.FileUtils;
+
+public class TestMakeErrorParser extends UITestCase {
+
+	public TestMakeErrorParser(String name) {
+		super(name);
+		// TODO Auto-generated constructor stub
+	}
+
+	CarbideErrorParserTestHarness harness;
+	private IProject project;
+	
+	private static final String PROJECT_NAME = "TestGcceErrorParser";
+	private static final String PROJECT_PATH = "group/bld.inf";
+	
+	protected void setUp() throws Exception {
+		super.setUp();
+		project = ProjectCorePlugin.createProject(PROJECT_NAME, null);
+		List<ISymbianBuildContext> contextList = new ArrayList<ISymbianBuildContext>();
+		
+		// You need to set the proper default configuration so the correct set of error parsers is called
+		List<ISymbianSDK> sdkList = SDKCorePlugin.getSDKManager().getSDKList();
+		for (ISymbianSDK currSDK : sdkList){
+			List<ISymbianBuildContext> contexts = currSDK.getUnfilteredBuildConfigurations();
+			for (ISymbianBuildContext context : contexts) {
+				if (context.getPlatformString().equals(ISymbianBuildContext.EMULATOR_PLATFORM)) {
+					contextList.add(context);
+					break;
+				}
+			}
+			if (contextList.size() > 0) {
+				break;
+			}
+		}
+		
+		assertTrue(contextList.size() > 0);		// if this fail, you don't have any SDK installed supporting GCCE
+		
+		ProjectCorePlugin.postProjectCreatedActions(project, PROJECT_PATH, 
+				contextList, new ArrayList<String>(), 
+				"Debug MMP", null, new NullProgressMonitor());
+		
+		ICarbideProjectInfo cpi = CarbideBuilderPlugin.getBuildManager().getProjectInfo(project);
+		ICarbideBuildConfiguration buildConfig = cpi.getDefaultConfiguration();
+		harness = new CarbideErrorParserTestHarness(project, 
+												new NullProgressMonitor(),
+												CarbideCPPBuilder.getParserIdArray(buildConfig.getErrorParserId()), 
+												cpi.getINFWorkingDirectory());
+	}
+	
+	protected void tearDown() throws Exception {
+		project.delete(true, null);
+		super.tearDown();
+	}
+	
+	/**
+	 * Regress Bugzilla issues by entries
+	 */
+	public void testBugzillaRegression() {
+		final String reportID[] = {"3201", "3134", "3490", "6415"};
+		//argument 1 is console output you get from the tool
+		//argument 2 is control XML with the marker data
+		try {
+			for (int i = 0; i < reportID.length; i++) {
+				harness.parseStringAndTestAgainstXML(FileUtils.pluginRelativeFile(TestPlugin.getDefault(), "data/errorpatterns/bugzilla/" + reportID[i] +".winscw.input.txt"), 
+						FileUtils.pluginRelativeFile(TestPlugin.getDefault(), "data/errorpatterns/bugzilla/" + reportID[i] +".winscw.regression.xml"));
+			}
+		} catch (IOException e) {
+			fail();
+		}
+	}
+
+}
--- a/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/errorParsers/TestMakmakeErrorParser.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/errorParsers/TestMakmakeErrorParser.java	Mon Apr 27 15:07:35 2009 -0500
@@ -21,6 +21,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import junit.framework.TestCase;
+
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.NullProgressMonitor;
 
@@ -29,18 +31,15 @@
 import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
 import com.nokia.carbide.cdt.builder.project.ICarbideProjectInfo;
 import com.nokia.carbide.cdt.builder.test.TestPlugin;
-import com.nokia.carbide.cpp.internal.api.sdk.SymbianBuildContext;
 import com.nokia.carbide.cpp.project.core.ProjectCorePlugin;
-import com.nokia.carbide.cpp.sdk.core.*;
+import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
 import com.nokia.cpp.internal.api.utils.core.FileUtils;
 
-import junit.framework.TestCase;
-
 public class TestMakmakeErrorParser extends TestCase {
 	private static final String PROJECT_NAME = "TestMakmakeErrorParser";
 	private static final String PROJECT_PATH = "group/bld.inf";
-	private static final String SDK_ID_UPPER_CASE = "S60_3RD_MR";  // ID of the SDK we want to use to create build configurations
-	
 	private static final String TEST_DATA_INPUT_FILE = "data/errorpatterns/makmake.errors.input.1.txt";
 	private static final String CONTROL_DATA_FILE    = "data/errorpatterns/makmake.errors.regression.1.xml";
 	
@@ -50,23 +49,23 @@
 	protected void setUp() throws Exception {
 		super.setUp();
 		project = ProjectCorePlugin.createProject(PROJECT_NAME, null);
+		List<ISymbianBuildContext> contextList = new ArrayList<ISymbianBuildContext>();
 		
 		// You need to set the proper default configuration so the correct set of error parsers is called
 		List<ISymbianSDK> sdkList = SDKCorePlugin.getSDKManager().getSDKList();
-		ISymbianSDK sdk = null;
 		for (ISymbianSDK currSDK : sdkList){
-			if (currSDK.getUniqueId().toUpperCase().equals(SDK_ID_UPPER_CASE)){
-				sdk = currSDK;
+			List<ISymbianBuildContext> contexts = currSDK.getUnfilteredBuildConfigurations();
+			for (ISymbianBuildContext context : contexts) {
+				if (context.getPlatformString().equals(ISymbianBuildContext.ARMV5_PLATFORM)) {
+					contextList.add(context);
+					break;
+				}
+			}
+			if (contextList.size() > 0) {
 				break;
 			}
 		}
 		
-		assertNotNull(sdk);
-		
-		ISymbianBuildContext context = new SymbianBuildContext(sdk, ISymbianBuildContext.ARMV5_PLATFORM, ISymbianBuildContext.DEBUG_TARGET);
-		List<ISymbianBuildContext> contextList = new ArrayList<ISymbianBuildContext>();
-		contextList.add(context);
-		
 		// Don't do this... Because it will just default to WINSCW target
 //		ProjectCorePlugin.postProjectCreatedActions(project, "group/bld.inf", 
 //				TestPlugin.getUsableBuildConfigs(), new ArrayList<String>(), 
--- a/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/errorParsers/TestRVCTErrorParser.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/errorParsers/TestRVCTErrorParser.java	Mon Apr 27 15:07:35 2009 -0500
@@ -21,6 +21,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import junit.framework.TestCase;
+
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.NullProgressMonitor;
 
@@ -29,18 +31,15 @@
 import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
 import com.nokia.carbide.cdt.builder.project.ICarbideProjectInfo;
 import com.nokia.carbide.cdt.builder.test.TestPlugin;
-import com.nokia.carbide.cpp.internal.api.sdk.SymbianBuildContext;
 import com.nokia.carbide.cpp.project.core.ProjectCorePlugin;
-import com.nokia.carbide.cpp.sdk.core.*;
+import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
 import com.nokia.cpp.internal.api.utils.core.FileUtils;
 
-import junit.framework.TestCase;
-
 public class TestRVCTErrorParser extends TestCase {
 	private static final String PROJECT_NAME = "TestRVCTErrorParser";
 	private static final String PROJECT_PATH = "group/bld.inf";
-	private static final String SDK_ID_UPPER_CASE = "S60_3RD_MR";  // ID of the SDK we want to use to create build configurations
-	
 	private static final String TEST_DATA_INPUT_FILE = "data/errorpatterns/rvct.errors.input.1.txt";
 	private static final String CONTROL_DATA_FILE    = "data/errorpatterns/rvct.errors.regression.1.xml";
 	
@@ -50,22 +49,24 @@
 	protected void setUp() throws Exception {
 		super.setUp();
 		project = ProjectCorePlugin.createProject(PROJECT_NAME, null);
+		List<ISymbianBuildContext> contextList = new ArrayList<ISymbianBuildContext>();
 		
 		// You need to set the proper default configuration so the correct set of error parsers is called
 		List<ISymbianSDK> sdkList = SDKCorePlugin.getSDKManager().getSDKList();
-		ISymbianSDK sdk = null;
 		for (ISymbianSDK currSDK : sdkList){
-			if (currSDK.getUniqueId().toUpperCase().equals(SDK_ID_UPPER_CASE)){
-				sdk = currSDK;
+			List<ISymbianBuildContext> contexts = currSDK.getUnfilteredBuildConfigurations();
+			for (ISymbianBuildContext context : contexts) {
+				if (context.getPlatformString().equals(ISymbianBuildContext.ARMV5_PLATFORM)) {
+					contextList.add(context);
+					break;
+				}
+			}
+			if (contextList.size() > 0) {
 				break;
 			}
 		}
 		
-		assertNotNull(sdk);
-		
-		ISymbianBuildContext context = new SymbianBuildContext(sdk, ISymbianBuildContext.ARMV5_PLATFORM, ISymbianBuildContext.DEBUG_TARGET);
-		List<ISymbianBuildContext> contextList = new ArrayList<ISymbianBuildContext>();
-		contextList.add(context);
+		assertTrue(contextList.size() > 0);		// if this fail, you don't have any SDK installed supporting GCCE
 		
 		// Don't do this... Because it will just default to WINSCW target
 //		ProjectCorePlugin.postProjectCreatedActions(project, "group/bld.inf", 
@@ -114,4 +115,22 @@
 			fail();
 		}
 	}
+	
+	/**
+	 * Regress Bugzilla issues by entries
+	 */
+	public void testBugzillaRegression() {
+		final String reportID[] = {"3053"};
+		//argument 1 is console output you get from the tool
+		//argument 2 is control XML with the marker data
+		try {
+			for (int i = 0; i < reportID.length; i++) {
+				harness.parseStringAndTestAgainstXML(FileUtils.pluginRelativeFile(TestPlugin.getDefault(), "data/errorpatterns/bugzilla/" + reportID[i] +".rvct.input.txt"), 
+						FileUtils.pluginRelativeFile(TestPlugin.getDefault(), "data/errorpatterns/bugzilla/" + reportID[i] +".rvct.regression.xml"));
+			}
+		} catch (IOException e) {
+			fail();
+		}
+	}
+
 }
--- a/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/errorParsers/TestSBSv2ErrorParser.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cdt.builder.test/src/com/nokia/carbide/cdt/builder/test/errorParsers/TestSBSv2ErrorParser.java	Mon Apr 27 15:07:35 2009 -0500
@@ -21,6 +21,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import junit.framework.TestCase;
+
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.NullProgressMonitor;
 
@@ -29,18 +31,15 @@
 import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
 import com.nokia.carbide.cdt.builder.project.ICarbideProjectInfo;
 import com.nokia.carbide.cdt.builder.test.TestPlugin;
-import com.nokia.carbide.cpp.internal.api.sdk.SymbianBuildContext;
 import com.nokia.carbide.cpp.project.core.ProjectCorePlugin;
-import com.nokia.carbide.cpp.sdk.core.*;
+import com.nokia.carbide.cpp.sdk.core.ISymbianBuildContext;
+import com.nokia.carbide.cpp.sdk.core.ISymbianSDK;
+import com.nokia.carbide.cpp.sdk.core.SDKCorePlugin;
 import com.nokia.cpp.internal.api.utils.core.FileUtils;
 
-import junit.framework.TestCase;
-
 public class TestSBSv2ErrorParser extends TestCase {
 	private static final String PROJECT_NAME = "TestSBSv2ErrorParser";
 	private static final String PROJECT_PATH = "group/bld.inf";
-	private static final String SDK_ID_UPPER_CASE = "SYMBIANOS_95_200906";  // ID of the SDK we want to use to create build configurations
-	
 	private static final String TEST_DATA_INPUT_FILE = "data/errorpatterns/sbsv2.errors.input.txt";
 	private static final String CONTROL_DATA_FILE    = "data/errorpatterns/sbsv2.errors.regression.xml";
 	
@@ -50,23 +49,23 @@
 	protected void setUp() throws Exception {
 		super.setUp();
 		project = ProjectCorePlugin.createProject(PROJECT_NAME, null);
+		List<ISymbianBuildContext> contextList = new ArrayList<ISymbianBuildContext>();
 		
 		// You need to set the proper default configuration so the correct set of error parsers is called
 		List<ISymbianSDK> sdkList = SDKCorePlugin.getSDKManager().getSDKList();
-		ISymbianSDK sdk = null;
 		for (ISymbianSDK currSDK : sdkList){
-			if (currSDK.getUniqueId().toUpperCase().equals(SDK_ID_UPPER_CASE)){
-				sdk = currSDK;
+			List<ISymbianBuildContext> contexts = currSDK.getUnfilteredBuildConfigurations();
+			for (ISymbianBuildContext context : contexts) {
+				if (context.getPlatformString().equals(ISymbianBuildContext.ARMV5_PLATFORM)) {
+					contextList.add(context);
+					break;
+				}
+			}
+			if (contextList.size() > 0) {
 				break;
 			}
 		}
 		
-		assertNotNull(sdk);
-		
-		ISymbianBuildContext context = new SymbianBuildContext(sdk, ISymbianBuildContext.ARMV5_PLATFORM, ISymbianBuildContext.DEBUG_TARGET);
-		List<ISymbianBuildContext> contextList = new ArrayList<ISymbianBuildContext>();
-		contextList.add(context);
-		
 		// Don't do this... Because it will just default to WINSCW target
 //		ProjectCorePlugin.postProjectCreatedActions(project, "group/bld.inf", 
 //				TestPlugin.getUsableBuildConfigs(), new ArrayList<String>(), 
--- a/builder/com.nokia.carbide.cdt.builder/plugin.xml	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/plugin.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -160,11 +160,27 @@
       </errorparser>
     </extension>
     <extension
-         id="GCCEErrorParser"
-         name="GCCE Error Parser"
+         id="GCCEAssemblerErrorParser"
+         name="GCCE Assembler Error Parser"
          point="org.eclipse.cdt.core.ErrorParser">
       <errorparser
-            class="com.nokia.carbide.cdt.internal.builder.error.parsers.GCCEErrorParser">
+            class="com.nokia.carbide.cdt.internal.builder.error.parsers.GCCEAssemblerErrorParser">
+      </errorparser>
+    </extension>
+    <extension
+         id="GCCECompilerErrorParser"
+         name="GCCE Compiler Error Parser"
+         point="org.eclipse.cdt.core.ErrorParser">
+      <errorparser
+            class="com.nokia.carbide.cdt.internal.builder.error.parsers.GCCECompilerErrorParser">
+      </errorparser>
+    </extension>
+    <extension
+         id="GCCELinkerErrorParser"
+         name="GCCE Linker Error Parser"
+         point="org.eclipse.cdt.core.ErrorParser">
+      <errorparser
+            class="com.nokia.carbide.cdt.internal.builder.error.parsers.GCCELinkerErrorParser">
       </errorparser>
     </extension>
     <extension
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/builder/CarbideCPPBuilder.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/builder/builder/CarbideCPPBuilder.java	Mon Apr 27 15:07:35 2009 -0500
@@ -923,8 +923,29 @@
 	 * @param calculateComponentLists whether or not to calculate the list of makmake components
 	 * @return false if any makefile generation was necessary but failed, true otherwise
 	 * @since 2.0
+	 * @deprecated Use {@link #generateAbldMakeFileIfNecessary(generateAbldMakefilesIfNecessary(ICarbideBuildConfiguration, CarbideCommandLauncher, boolean, IProgressMonitor)} instead
 	 */
 	public static boolean generateAbldMakefilesIfNecessary(ICarbideBuildConfiguration config, CarbideCommandLauncher launcher, boolean calculateComponentLists) {
+		return generateAbldMakefilesIfNecessary(config, launcher, calculateComponentLists, new NullProgressMonitor());
+	}
+
+	/**
+	 * Generates the abld makefiles if necessary.
+	 * Loops through the mmp files to be built for the given build configuration and generates the makefile
+	 * for the mmp if:
+	 * 	 1) the makefile for the mmp does not exist
+	 *   2) if the mmp or any of its includes is newer than the makefile
+	 *   3) the makefile does not have the necessary Carbide changes
+	 *   
+	 *   The command used will be 'abld [test] makefile platform mmpname'
+	 * @param config the build configuration context
+	 * @param launcher the Carbide launcher
+	 * @param calculateComponentLists whether or not to calculate the list of makmake components
+	 * @param progress monitor to allow user to cancel
+	 * @return false if any makefile generation was necessary but failed, true otherwise
+	 * @since 2.0
+	 */
+	public static boolean generateAbldMakefilesIfNecessary(ICarbideBuildConfiguration config, CarbideCommandLauncher launcher, boolean calculateComponentLists, IProgressMonitor progress) {
 
 		if (calculateComponentLists) {
 			calculateComponentLists(config, launcher);
@@ -932,20 +953,20 @@
 
 		// generate the makefiles if necessary
 		for (IPath path : normalMakMakePaths) {
-			if (!generateAbldMakefileIfNecessary(config, launcher, path, false)) {
+			if (!generateAbldMakefileIfNecessary(config, launcher, path, false, progress)) {
 				return false;
 			}
 		}
 		
 		for (IPath path : testMakMakePaths) {
-			if (!generateAbldMakefileIfNecessary(config, launcher, path, true)) {
+			if (!generateAbldMakefileIfNecessary(config, launcher, path, true, progress)) {
 				return false;
 			}
 		}
 
 		return true;
 	}
-
+	
 	/**
 	 * Generates the abld makefile if necessary.
 	 * Generates the makefile for the given mmp file if:
@@ -960,8 +981,8 @@
 	 * @param isTest true for test components, false otherwise
 	 * @return false if any makefile generation was necessary but failed, true otherwise
 	 */
-	protected static boolean generateAbldMakefileIfNecessary(ICarbideBuildConfiguration config, CarbideCommandLauncher launcher, IPath componentPath, boolean isTest) {
-		return getBuilder(config.getCarbideProject().getProject()).generateAbldMakefileIfNecessary(config, launcher, componentPath, isTest);
+	protected static boolean generateAbldMakefileIfNecessary(ICarbideBuildConfiguration config, CarbideCommandLauncher launcher, IPath componentPath, boolean isTest, IProgressMonitor progress) {
+		return getBuilder(config.getCarbideProject().getProject()).generateAbldMakefileIfNecessary(config, launcher, componentPath, isTest, progress);
 	}
 	
 /**
@@ -983,7 +1004,7 @@
 		        "com.nokia.carbide.cdt.builder.SBSv2ErrorParser",
 		        "com.nokia.carbide.cdt.builder.CarbideMakeErrorParser",
 		        "com.nokia.carbide.cdt.builder.RCOMPErrorParser",
-		        "com.nokia.carbide.cdt.builder.GCCErrorParser",
+		        "org.eclipse.cdt.core.GCCErrorParser",				// for cpp message from RCOMP
 		        "com.nokia.carbide.cdt.builder.MWLDErrorParser",
 		        "com.nokia.carbide.cdt.builder.MWCCErrorParser",
 		        "com.nokia.carbide.cdt.builder.MakeDefErrorParser"
@@ -1000,6 +1021,7 @@
 			        "com.nokia.carbide.cdt.builder.RVCTLinkerErrorParser",
 			        "com.nokia.carbide.cdt.builder.MakeDefErrorParser",
 			        "com.nokia.carbide.cdt.builder.RCOMPErrorParser",
+			        "org.eclipse.cdt.core.GCCErrorParser",				// for cpp message from RCOMP
 			        "com.nokia.carbide.cdt.builder.Elf2E32ErrorParser"
 			        };
 			break;
@@ -1010,7 +1032,9 @@
 			        "com.nokia.carbide.cdt.builder.SBSv2ErrorParser",
 			        "com.nokia.carbide.cdt.builder.CarbideMakeErrorParser",
 			        "com.nokia.carbide.cdt.builder.RCOMPErrorParser",
-			        "com.nokia.carbide.cdt.builder.GCCEErrorParser",
+			        "com.nokia.carbide.cdt.builder.GCCECompilerErrorParser",		// also handles cpp message from RCOMP
+			        "com.nokia.carbide.cdt.builder.GCCEAssemblerErrorParser",
+			        "com.nokia.carbide.cdt.builder.GCCELinkerErrorParser",
 			        "com.nokia.carbide.cdt.builder.MakeDefErrorParser",
 			        "com.nokia.carbide.cdt.builder.Elf2E32ErrorParser"
 			        };
@@ -1060,7 +1084,7 @@
 			        "com.nokia.carbide.cdt.builder.RVCTCompilerErrorParser",
 			        "com.nokia.carbide.cdt.builder.RVCTLinkerErrorParser",
 			        "com.nokia.carbide.cdt.builder.RCOMPErrorParser",
-			        "com.nokia.carbide.cdt.builder.GCCEErrorParser",
+			        "org.eclipse.cdt.core.GCCErrorParser",				// for cpp message from RCOMP
 			        "com.nokia.carbide.cdt.builder.MWLDErrorParser",
 			        "com.nokia.carbide.cdt.builder.MakeDefErrorParser",
 			        "com.nokia.carbide.cdt.builder.Elf2E32ErrorParser",
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideSBSv1Builder.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideSBSv1Builder.java	Mon Apr 27 15:07:35 2009 -0500
@@ -189,7 +189,7 @@
 			}
 			
 			// run abld makefile platform for each component to be built if needed
-			if (!generateAbldMakefileIfNecessary(buildConfig, launcher, componentPath, isTest)) {
+			if (!generateAbldMakefileIfNecessary(buildConfig, launcher, componentPath, isTest, progress)) {
 				return false;
 			}
 
@@ -337,7 +337,7 @@
 		progress.setTaskName("Cleaning " + componentName);
 
 		// run abld makefile platform for each component to be built if needed
-		if (!generateAbldMakefileIfNecessary(buildConfig, launcher, componentPath, isTest)) {
+		if (!generateAbldMakefileIfNecessary(buildConfig, launcher, componentPath, isTest, progress)) {
 			return false;
 		}
 
@@ -390,7 +390,7 @@
 		String componentName = componentPath.removeFileExtension().lastSegment();
 		
 		// run abld makefile platform for each component to be built if needed
-		if (!generateAbldMakefileIfNecessary(buildConfig, launcher, componentPath, isTest)) {
+		if (!generateAbldMakefileIfNecessary(buildConfig, launcher, componentPath, isTest, monitor)) {
 			return false;
 		}
 
@@ -483,7 +483,7 @@
 			return;
 		}
 
-		if (!generateAbldMakefileIfNecessary(buildConfig, launcher, fullMMPPath, isTest)) {
+		if (!generateAbldMakefileIfNecessary(buildConfig, launcher, fullMMPPath, isTest, monitor)) {
 			return;
 		}
 
@@ -936,7 +936,7 @@
 		}
 		
 		// run abld makefile platform for each component to be built if needed
-		if (!CarbideCPPBuilder.generateAbldMakefilesIfNecessary(buildConfig, launcher, false)) {
+		if (!CarbideCPPBuilder.generateAbldMakefilesIfNecessary(buildConfig, launcher, false, progress)) {
 			return false;
 		}
 
@@ -1251,7 +1251,7 @@
 		}
 		
 		// run abld makefile platform for each component to be built if needed
-		if (!CarbideCPPBuilder.generateAbldMakefilesIfNecessary(buildConfig, launcher, false)) {
+		if (!CarbideCPPBuilder.generateAbldMakefilesIfNecessary(buildConfig, launcher, false, progress)) {
 			return false;
 		}
 
@@ -1477,7 +1477,7 @@
 			return;
 		}
 		
-		if (!CarbideCPPBuilder.generateAbldMakefilesIfNecessary(buildConfig, launcher, false)) {
+		if (!CarbideCPPBuilder.generateAbldMakefilesIfNecessary(buildConfig, launcher, false, progress)) {
 			return;
 		}
 		
@@ -1575,7 +1575,7 @@
 			return;
 		}
 
-		if (!CarbideCPPBuilder.generateAbldMakefilesIfNecessary(buildConfig, launcher, false)) {
+		if (!CarbideCPPBuilder.generateAbldMakefilesIfNecessary(buildConfig, launcher, false, progress)) {
 			return;
 		}
 		
@@ -1679,7 +1679,7 @@
 			return;
 		}
 		
-		if (!CarbideCPPBuilder.generateAbldMakefilesIfNecessary(buildConfig, launcher, false)) {
+		if (!CarbideCPPBuilder.generateAbldMakefilesIfNecessary(buildConfig, launcher, false, progress)) {
 			return;
 		}
 		
@@ -1748,7 +1748,7 @@
 			return;
 		}
 
-		if (!CarbideCPPBuilder.generateAbldMakefilesIfNecessary(buildConfig, launcher, false)) {
+		if (!CarbideCPPBuilder.generateAbldMakefilesIfNecessary(buildConfig, launcher, false, progress)) {
 			return;
 		}
 		
@@ -2200,6 +2200,11 @@
 	}
 	
 	public boolean generateAbldMakefileIfNecessary(ICarbideBuildConfiguration config, CarbideCommandLauncher launcher, IPath componentPath, boolean isTest) {
+		return generateAbldMakefileIfNecessary(config, launcher, componentPath, isTest, new NullProgressMonitor()); 
+	}
+
+	
+	public boolean generateAbldMakefileIfNecessary(ICarbideBuildConfiguration config, CarbideCommandLauncher launcher, IPath componentPath, boolean isTest, IProgressMonitor progress) {
 
 		// generate the makefile if necessary
 		if (needsAbldMakefileGeneration(config, componentPath)) {
@@ -2249,7 +2254,7 @@
 			// now make our changes to the generated makefile
 			if (areWeManagingTheMakeFiles) {
 				try {
-					updateMakefile(config, componentPath);
+					updateMakefile(config, componentPath, progress);
 				} catch (CoreException e) {
 					CarbideBuilderPlugin.log(e);
 					e.printStackTrace();
@@ -2434,12 +2439,16 @@
 		return makefilePath.toFile();
 	}
 	
-	protected void updateMakefile(ICarbideBuildConfiguration config, IPath componentPath) throws CoreException {
+	protected void updateMakefile(ICarbideBuildConfiguration config, IPath componentPath, IProgressMonitor progress) throws CoreException {
 		// ignore extension makefiles.
 		if (isExtensionMakefile(componentPath)) {
 			return;
 		}
 		
+		if (progress.isCanceled()) {
+			return;
+		}
+		
 		File makefile = getMakefileForMMP(config, componentPath);
 		if (!makefile.exists()) {
 			throw new CoreException(new Status(IStatus.ERROR, CarbideBuilderPlugin.PLUGIN_ID, 0, "Makefile " + makefile.getAbsolutePath() + " doesn't exist.", null)); //$NON-NLS-1$
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideSBSv2Builder.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/CarbideSBSv2Builder.java	Mon Apr 27 15:07:35 2009 -0500
@@ -450,6 +450,10 @@
 		}
 	}
 
+	public boolean generateAbldMakefileIfNecessary(ICarbideBuildConfiguration config, CarbideCommandLauncher launcher, IPath componentPath, boolean isTest, IProgressMonitor progress) {
+		return true;
+	}
+	
 	public boolean generateAbldMakefileIfNecessary(ICarbideBuildConfiguration config, CarbideCommandLauncher launcher, IPath componentPath, boolean isTest) {
 		return true;
 	}
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ICarbideBuilder.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/ICarbideBuilder.java	Mon Apr 27 15:07:35 2009 -0500
@@ -58,8 +58,12 @@
 	public String [] getResolvedEnvVars(ICarbideBuildConfiguration config);
 
 	public boolean needsBldmakeMakefileGeneration(ICarbideBuildConfiguration config);
+	
+	@Deprecated
+	public boolean generateAbldMakefileIfNecessary(ICarbideBuildConfiguration config, CarbideCommandLauncher launcher, IPath componentPath, boolean isTest);
+	
+	public boolean generateAbldMakefileIfNecessary(ICarbideBuildConfiguration config, CarbideCommandLauncher launcher, IPath componentPath, boolean isTest, IProgressMonitor progress);
 
-	public boolean generateAbldMakefileIfNecessary(ICarbideBuildConfiguration config, CarbideCommandLauncher launcher, IPath componentPath, boolean isTest);
 	
 	public IPath getMakefileDirectory(ICarbideBuildConfiguration config);
 }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/error/parsers/AbstractGCCEErrorParser.java	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+* Handles GCCE specific error before invoking CDT error parser
+* 
+*/
+package com.nokia.carbide.cdt.internal.builder.error.parsers;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.cdt.core.ErrorParserManager;
+import org.eclipse.cdt.core.IMarkerGenerator;
+import org.eclipse.cdt.internal.errorparsers.AbstractErrorParser;
+import org.eclipse.cdt.internal.errorparsers.ErrorPattern;
+
+/*
+ * AbstractErrorParser/ErrorPattern are going to public API in CDT 5.1
+ */
+abstract public class AbstractGCCEErrorParser extends AbstractErrorParser {
+	private String toolNameString;
+	private static final ErrorPattern[] patterns = {
+		/*
+		 *	int groupFileName,
+		 *	int groupLineNum,
+		 *	int groupDesc,
+		 *	int groupVarName,
+		 *	int severity
+		 */
+			// arm-none-symbianelf-g++: \test\test.cpp: No such file or directory
+			new ErrorPattern("(.*):\\s*(.*:)\\s*(.*(?:[Nn]o such file:\\s*)?[Nn]o such file or directory)", 2, 0, 3, 0, IMarkerGenerator.SEVERITY_ERROR_RESOURCE),	//$NON-NLS-1$
+			// arm-none-symbianelf-g++: no input files
+			new ErrorPattern("(.*):\\s*(.*[Nn]o input files)", 0, 0, 2, 0, IMarkerGenerator.SEVERITY_ERROR_RESOURCE),	//$NON-NLS-1$
+			//arm-none-symbianelf-g++: warning: `-x c++' after last input file has no effect
+			//arm-none-symbianelf-g++: error: some message
+			new ErrorPattern("(.*):\\s*(.*[(?:[Ww]arning)(?:[Ee]rror)]):\\s*(.*)", 0, 0, 3, 0, IMarkerGenerator.SEVERITY_INFO) {	//$NON-NLS-1$
+
+				@Override
+				public int getSeverity(Matcher matcher) {
+					String warningGroup = matcher.group(2);
+					if (warningGroup != null && warningGroup.indexOf("arning") >= 0) //$NON-NLS-1$
+						return IMarkerGenerator.SEVERITY_WARNING;
+					
+					return IMarkerGenerator.SEVERITY_ERROR_RESOURCE;
+				}
+
+			}
+	};
+	
+	protected AbstractGCCEErrorParser(String toolNameString) {
+		super(patterns);
+		this.toolNameString = toolNameString;
+	}
+	
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.cdt.internal.errorparsers.AbstractErrorParser#processLine(java.lang.String, org.eclipse.cdt.core.ErrorParserManager)
+	 * 
+	 * Only pick up message that matches the tool name pattern
+	 * 
+	 */
+	public boolean processLine(String line, ErrorParserManager eoParser) {
+		if (line.startsWith(toolNameString)) {
+			return super.processLine(line, eoParser);
+		}
+		return false;
+	}
+}
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/error/parsers/CarbideBaseErrorParser.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/error/parsers/CarbideBaseErrorParser.java	Mon Apr 27 15:07:35 2009 -0500
@@ -172,7 +172,7 @@
 	 * sets iIFile variable if possible
 	 * 
 	 * @param errorParserManager
-	 *            Errro parser manager to query
+	 *            Error parser manager to query
 	 */
 	protected void setFile(ErrorParserManager errorParserManager) {
 		// if no filename, just return
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/error/parsers/CarbideMakeErrorParser.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/error/parsers/CarbideMakeErrorParser.java	Mon Apr 27 15:07:35 2009 -0500
@@ -50,6 +50,7 @@
 		if (matcher.matches()) {
 			setDescription(matcher.group(1));
 			String msg = " - possibly too many arguments.  If there are a lot of source files in a library, try breaking those out into multiple libraries.";
+			msgLineNumber = -1;
 			eoParser.generateMarker(rsrc, msgLineNumber, line + msg, msgSeverity, null);
 			return true;
 		}
@@ -108,7 +109,7 @@
 		
 		if (line.contains(rvctNotInstalled)){
 			// create a specific error message when rvct is not installed since the build tools don't
-			this.msgDescription = "RVCT not isntalled or 'armcc' is not on PATH. Please check that your environment for the RVCT compiler is correct.";
+			this.msgDescription = "RVCT not installed or 'armcc' is not on PATH. Please check that your environment for the RVCT compiler is correct.";
 			this.msgLineNumber = -1;
 			this.msgSeverity = IMarkerGenerator.SEVERITY_ERROR_BUILD;
 			eoParser.generateMarker(rsrc, msgLineNumber, msgDescription, msgSeverity, null);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/error/parsers/GCCEAssemblerErrorParser.java	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+* Handles GCCE specific error before invoking CDT GNU assembler error parser
+* 
+*/
+package com.nokia.carbide.cdt.internal.builder.error.parsers;
+
+import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.ErrorParserManager;
+import org.eclipse.cdt.core.IErrorParser;
+import org.eclipse.cdt.core.IMarkerGenerator;
+
+public class GCCEAssemblerErrorParser extends AbstractGCCEErrorParser {
+	static String parsersID = "org.eclipse.cdt.core.GASErrorParser";
+	static IErrorParser asErrorParser = CCorePlugin.getDefault().getErrorParser(parsersID)[0];
+	
+	public GCCEAssemblerErrorParser() {
+		super("arm-none-symbianelf-as");		//$NON-NLS-1$
+	}
+	
+	public boolean processLine(String line, ErrorParserManager eoParser) {
+		String lineLC = line.toLowerCase();
+		// check if the tool is installed.  if not then give add a user friendly error to the problems view.
+		if (lineLC.startsWith("'arm-none-symbianelf-as.exe' is not recognized")) {
+			eoParser.generateMarker(eoParser.getProject(), 0, "GCCE not found on the PATH.  Please check your GCCE installation.", IMarkerGenerator.SEVERITY_ERROR_BUILD, null);
+			return true;
+		}
+	
+		if (asErrorParser.processLine(line, eoParser)) {
+			return true;
+		}
+		
+		// pick up where CDT failed to pick up
+		// consider porting to CDT later
+		if (super.processLine(line, eoParser)) {
+			return true;
+		}
+		
+		return false;
+	}
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/error/parsers/GCCECompilerErrorParser.java	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+* Handles GCCE specific error before invoking CDT GCC error parser
+* 
+*/
+package com.nokia.carbide.cdt.internal.builder.error.parsers;
+
+import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.ErrorParserManager;
+import org.eclipse.cdt.core.IErrorParser;
+import org.eclipse.cdt.core.IMarkerGenerator;
+
+public class GCCECompilerErrorParser extends AbstractGCCEErrorParser {
+
+	public GCCECompilerErrorParser() {
+		super("arm-none-symbianelf-g++");		//$NON-NLS-1$
+	}
+
+	static String parsersID = "org.eclipse.cdt.core.GCCErrorParser";
+	static IErrorParser gccErrorParser = CCorePlugin.getDefault().getErrorParser(parsersID)[0];
+	
+	public boolean processLine(String line, ErrorParserManager eoParser) {
+		String lineLC = line.toLowerCase();
+		
+		// check if the tool is installed.  if not then give add a user friendly error to the problems view.
+		if (lineLC.startsWith("'arm-none-symbianelf-g++.exe' is not recognized")) {
+			eoParser.generateMarker(eoParser.getProject(), 0, "GCCE not found on the PATH.  Please check your GCCE installation.", IMarkerGenerator.SEVERITY_ERROR_BUILD, null);
+			return true;
+		}
+	
+		if (gccErrorParser.processLine(line, eoParser)) {
+			return true;
+		}
+		
+		// pick up where CDT failed to pick up
+		// consider porting to CDT later
+		if (super.processLine(line, eoParser)) {
+			return true;
+		}
+		
+		return false;
+	}
+
+}
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/error/parsers/GCCEErrorParser.java	Fri Apr 24 10:31:21 2009 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,65 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-package com.nokia.carbide.cdt.internal.builder.error.parsers;
-
-import org.eclipse.cdt.core.ErrorParserManager;
-import org.eclipse.cdt.core.IMarkerGenerator;
-import org.eclipse.cdt.internal.errorparsers.GCCErrorParser;
-
-public class GCCEErrorParser extends GCCErrorParser {
-
-	public boolean processLine(String line, ErrorParserManager eoParser) {
-		String lineLC = line.toLowerCase();
-		
-		// check if the tool is installed.  if not then give add a user friendly error to the problems view.
-		if (lineLC.startsWith("'arm-none-symbianelf-g++.exe' is not recognized")) {
-			eoParser.generateMarker(eoParser.getProject(), 0, "GCCE not found on the PATH.  Please check your GCCE installation.", IMarkerGenerator.SEVERITY_ERROR_BUILD, null);
-			return true;
-		}
-		
-		// case for arm-none-symbianelf-ld:
-		if (lineLC.contains("no such file: no such file or directory") || lineLC.contains("no such file or directory")) {
-			eoParser.generateMarker(eoParser.getProject(), 0, line, IMarkerGenerator.SEVERITY_ERROR_BUILD, null);
-			return true;
-		}
-		
-		// fix bug #4541 (and #5618).  undefined reference linker errors.  note that they work correctly already for udeb
-		// build because the error is reported with the source path and line #.  urel builds give an offset to
-		// the text section.
-		//Test2.cpp:(.text+0x1a4): undefined reference to `foo()' (UREL)
-		//..\\src\/Test2.cpp:69: undefined reference to `foo()' (UDEB)
-		if ((lineLC.contains("(.text") || lineLC.contains("(.rodata")) && lineLC.contains(": undefined reference to ")) {
-			eoParser.generateMarker(eoParser.getProject(), 0, line, IMarkerGenerator.SEVERITY_ERROR_BUILD, null);
-			return true;
-		}
-
-		// fix bug #6417. multiple definition linker errors.  note that they work correctly already for udeb
-		// build because the error is reported with the source path and line #.  urel builds give an offset to
-		// the text section.
-		//b6417_2.cpp:(.text+0x88): multiple definition of `E32Main()'
-		//\Symbian\9.2\S60_3rd_FP1\EPOC32\BUILD\Eclipse\rc1torc2workspace\b6417\group\B6417\GCCE\UREL\b6417.o:b6417.cpp:(.text+0x88): first defined here
-		if ((lineLC.contains("(.text") || lineLC.contains("(.rodata")) &&
-				(lineLC.contains(": multiple definition of ") || lineLC.contains(": first defined here"))) {
-			eoParser.generateMarker(eoParser.getProject(), 0, line, IMarkerGenerator.SEVERITY_ERROR_BUILD, null);
-			return true;
-		}
-
-		// the default gcce error parser
-		return super.processLine(line, eoParser);
-	}
-	
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/error/parsers/GCCELinkerErrorParser.java	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* 
+* Handles GCCE specific error before invoking CDT GNU linker error parser
+* 
+*/
+package com.nokia.carbide.cdt.internal.builder.error.parsers;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.cdt.core.CCorePlugin;
+import org.eclipse.cdt.core.ErrorParserManager;
+import org.eclipse.cdt.core.IErrorParser;
+import org.eclipse.cdt.core.IMarkerGenerator;
+
+public class GCCELinkerErrorParser extends AbstractGCCEErrorParser {
+	static String TOOLNAME = "arm-none-symbianelf-ld";
+	static String parsersID = "org.eclipse.cdt.core.GLDErrorParser";
+	static IErrorParser ldErrorParser = CCorePlugin.getDefault().getErrorParser(parsersID)[0];
+	
+	private static final Pattern rodataErrorPattern = Pattern.compile("(.*)\\(\\.rodata\\+.*\\): (.*)"); //$NON-NLS-1$;
+	private static final Pattern errorPattern = Pattern.compile(TOOLNAME + "(\\.exe)?:\\s*(.*)");	//$NON-NLS-1$;
+	
+	public GCCELinkerErrorParser() {
+		super(TOOLNAME);
+	}
+	
+	public boolean processLine(String line, ErrorParserManager eoParser) {
+		String lineLC = line.toLowerCase();
+		Matcher ldMatcher;
+		
+		// check if the tool is installed.  if not then give add a user friendly error to the problems view.
+		if (lineLC.startsWith("'arm-none-symbianelf-ld.exe' is not recognized")) {
+			eoParser.generateMarker(eoParser.getProject(), 0, "GCCE not found on the PATH.  Please check your GCCE installation.", IMarkerGenerator.SEVERITY_ERROR_BUILD, null);
+			return true;
+		}
+		
+		if (ldErrorParser.processLine(line, eoParser)) {
+			return true;
+		}
+
+		// pick up where CDT failed to pick up
+		// consider porting to CDT later
+		if (super.processLine(line, eoParser)) {
+			return true;
+		}
+		
+		ldMatcher = rodataErrorPattern.matcher(line);
+		if (ldMatcher.matches()) {
+			eoParser.generateMarker(eoParser.getProject(), 0, line, IMarkerGenerator.SEVERITY_ERROR_RESOURCE, null);
+			return true;			
+		}
+		
+		ldMatcher = errorPattern.matcher(line);
+		if (ldMatcher.matches()) {
+			eoParser.generateMarker(eoParser.getProject(), 0, ldMatcher.group(2), IMarkerGenerator.SEVERITY_ERROR_RESOURCE, null);
+			return true;
+		}
+
+		return false;
+	}
+
+}
--- a/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/error/parsers/RCOMPErrorParser.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cdt.builder/src/com/nokia/carbide/cdt/internal/builder/error/parsers/RCOMPErrorParser.java	Mon Apr 27 15:07:35 2009 -0500
@@ -22,83 +22,10 @@
 
 import org.eclipse.cdt.core.ErrorParserManager;
 import org.eclipse.cdt.core.IMarkerGenerator;
-import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 
 public class RCOMPErrorParser extends CarbideBaseErrorParser {
 
-	private Pattern cppFileLineWarningPattern;
-	private Pattern cppFileLinePattern;
-	private Pattern cppFileLineInfoPattern;
-	
-	public RCOMPErrorParser() {
-		// match file, line, possible column, and warning
-		cppFileLineWarningPattern = Pattern.compile("(.+):(\\d+):(?:(\\d+:)?)\\s+warning:\\s+(.*)"); //$NON-NLS-1$
-		// match file, line, possible column, and error
-		cppFileLinePattern = Pattern.compile("(.+):(\\d+):(?:(\\d+:)?)\\s+(.*)"); //$NON-NLS-1$
-//		 match file, line, possible column, and info
-		cppFileLineInfoPattern = Pattern.compile("(.+):(\\d+):(?:(\\d+:)?)\\s+note:(.*)"); //$NON-NLS-1$
-	}
-
-	private boolean processPreprocessorLine(String line, ErrorParserManager errorParserManager) {
-		// Known patterns:
-		//
-		// (a)
-		// %s:%d: warning: %s
-		//
-		// (b)
-		// %s:%d:%d: warning: %s
-		//
-		// (c)
-		// %s:%d: %s
-		//
-		// (d)
-		// %s:%d:%d: %s
-		//
-		// (e)
-		// * cpp failed
-
-		initialise();
-
-		Matcher cppMatcher = cppFileLineWarningPattern.matcher(line);
-		if (cppMatcher.matches()) {
-			msgFileName = cppMatcher.group(1);
-			msgLineNumber = Integer.parseInt(cppMatcher.group(2));
-			msgDescription = cppMatcher.group(4);
-			setFile(errorParserManager);
-			errorParserManager.generateExternalMarker(msgIFile, msgLineNumber,	msgDescription, IMarkerGenerator.SEVERITY_WARNING, null, externalFilePath);
-			return true;
-		}
-
-		cppMatcher = cppFileLineInfoPattern.matcher(line);
-		if (cppMatcher.matches()) {
-			msgFileName = cppMatcher.group(1);
-			msgLineNumber = Integer.parseInt(cppMatcher.group(2));
-			msgDescription = cppMatcher.group(4);
-			setFile(errorParserManager);
-			errorParserManager.generateExternalMarker(msgIFile, msgLineNumber, msgDescription, IMarkerGenerator.SEVERITY_INFO, null, externalFilePath);
-			return true;
-		}
-		
-		cppMatcher = cppFileLinePattern.matcher(line);
-		if (cppMatcher.matches()) {
-			msgFileName = cppMatcher.group(1);
-			msgLineNumber = Integer.parseInt(cppMatcher.group(2));
-			msgDescription = cppMatcher.group(4);
-			setFile(errorParserManager);
-			errorParserManager.generateExternalMarker(msgIFile, msgLineNumber, msgDescription, IMarkerGenerator.SEVERITY_ERROR_BUILD, null, externalFilePath);
-			return true;
-		}
-
-		if (line.startsWith("* cpp failed") || line.startsWith("* BMCONV failed") 
-			|| line.startsWith("* mifconv.exe failed") || line.startsWith("* epocaif.pl failed") 
-			|| line.toUpperCase().startsWith("FAILED TO UPDATE FILE") ) {
-			errorParserManager.generateExternalMarker(null, -1, line, IStatus.ERROR, null, externalFilePath);
-			return true;
-		}
-
-		return false;
-	}
 	public boolean processLine(String line, ErrorParserManager errorParserManager) {
 		// Known patterns.
 		// (a)
@@ -111,11 +38,11 @@
 		// filename(lineno) : Error: (ErrorNumber) iDescription
 		//
 		// (d)
-		// cannot open %s for writing (where %s is the asbolute path to the .rsc
+		// cannot open %s for writing (where %s is the absolute path to the .rsc
 		// file)
 		//
 		// (e)
-		// Failed to write UIDs to %s (where %s is the asbolute path to the .rsc
+		// Failed to write UIDs to %s (where %s is the absolute path to the .rsc
 		// file)
 		//
 		// (f)
@@ -124,34 +51,51 @@
 		// (g)
 		// ERROR: %s (where %s could be anything really)
 		//
-		// (h) C Pre-Processor
-		// Filename:lineNumber: iDescription
+		// (h) C Pre-Processor failing
+		// * cpp failed
+		//
+		// (i)
+		// Failed to open %s
 		//
-		// (i) C Pre-Processor failing
-		// * cpp failed
+		// (j)
+		// RCOMP failed with code %d
+		//
+		
+		// Warning pattern
+		// (a)
+		// atof may have failed for %s
 		
 		initialise();
 		
-		if (processPreprocessorLine(line, errorParserManager))
-			return true;
-		
+		// some error
 		HashSet<String> linePrefixes = new HashSet<String>();
 		linePrefixes.add("cannot open "); //$NON-NLS-1$
 		linePrefixes.add("Failed to write UIDs to "); //$NON-NLS-1$
 		linePrefixes.add("* RCOMP failed -"); //$NON-NLS-1$
 		linePrefixes.add("ERROR: "); //$NON-NLS-1$
 		linePrefixes.add("* cpp failed"); //$NON-NLS-1$
+		linePrefixes.add("Failed to open "); //$NON-NLS-1$
+		linePrefixes.add("RCOMP failed with code "); //$NON-NLS-1$
 
 		if (checkForLineBeginnings(line, linePrefixes.toArray(new String[linePrefixes.size()]))) {
 			errorParserManager.generateMarker(null, -1, line, msgSeverity, null);
 			return true;
 		}
+		
+		// some warning
+		HashSet<String> warningLinePrefixes = new HashSet<String>();
+		warningLinePrefixes.add("atof may have failed for "); //$NON-NLS-1$
+		
+		if (checkForLineBeginnings(line, warningLinePrefixes.toArray(new String[warningLinePrefixes.size()]))) {
+			errorParserManager.generateMarker(null, -1, line, IMarkerGenerator.SEVERITY_WARNING, null);
+			return true;
+		}
 
 		// check for MBM build failure.  This string is part of the help text spewed out
 		// for an invalid command line.  Same in Symbian 7.0s and 9.2, so assumed static.
 		if (line.indexOf("epocmbm [-h headerfile]") >= 0) { //$NON-NLS-1$
 			errorParserManager.generateMarker(null, -1,
-					"epocmbm build failed (perhaps due to an empty image list or invalid color format specification): please check the Console",
+					"epocmbm build failed (perhaps due to an empty image list or invalid color format specification): please check the Console", //$NON-NLS-1$
 					IMarkerGenerator.SEVERITY_ERROR_BUILD, null);
 			return true;
 		}
@@ -163,7 +107,7 @@
 		if (!setFileNameAndLineNumber(line) && !setDetailsFromCppOutput(line)) {
 			return false;	
 		}
-		String[] extensionsToExclude = {".pkg", ".def", ".defi"}; //$NON-NLS-1$ //$NON-NLS-2$ 
+		String[] extensionsToExclude = {".pkg", ".def", ".defi", ".asm", ".c" ,".c++", ".cc", ".cia", ".cpp", ".cxx", "h", ".hh", ".hpp", ".hxx", ".s"}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$ //$NON-NLS-9$ //$NON-NLS-10$ //$NON-NLS-11$ //$NON-NLS-12$ //$NON-NLS-13$ //$NON-NLS-14$ //$NON-NLS-15$ 
 		if (hasExcludedExtension(extensionsToExclude)) {
 			return false;
 		}
@@ -208,7 +152,7 @@
 			// Remove the warning.
 			msgDescription = msgDescription.substring("warning".length()).trim(); //$NON-NLS-1$
 			msgSeverity = IMarkerGenerator.SEVERITY_WARNING;
-		} else if (msgDescription.matches("(?i)error.*")) {
+		} else if (msgDescription.matches("(?i)error.*")) { //$NON-NLS-1$
 			// Remove the error.
 			msgDescription = msgDescription.substring("error".length()).trim(); //$NON-NLS-1$
 		}
--- a/builder/com.nokia.carbide.cpp.builder.utils/src/com/nokia/carbide/cpp/internal/builder/utils/handlers/ProjectCommandHandler.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/builder/com.nokia.carbide.cpp.builder.utils/src/com/nokia/carbide/cpp/internal/builder/utils/handlers/ProjectCommandHandler.java	Mon Apr 27 15:07:35 2009 -0500
@@ -27,6 +27,7 @@
 import org.eclipse.core.commands.ExecutionEvent;
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -177,7 +178,9 @@
 						for (final ICarbideBuildConfiguration currConfig : buildConfigList) {
 							launcher.setErrorParserManager(cpi.getINFWorkingDirectory(), CarbideCPPBuilder.getParserIdArray(currConfig.getErrorParserId()));
 							
-
+							if (monitor.isCanceled()) {
+								return new Status(IStatus.CANCEL, "Carbide.c++ builder utils plugin", IStatus.CANCEL, "Build Cancelled", null); 
+							}
 							// kick off a build for each configuration...
 							CarbideCPPBuilder.invokeBuild(currConfig, launcher, subMonitor.newChild(1), false);
 							
--- a/carbidesdk/com.nokia.carbide.cpp.sdk.doc.user/html/reference/api_Change_Notes.htm	Fri Apr 24 10:31:21 2009 -0500
+++ b/carbidesdk/com.nokia.carbide.cpp.sdk.doc.user/html/reference/api_Change_Notes.htm	Mon Apr 27 15:07:35 2009 -0500
@@ -56,10 +56,10 @@
 
 <p>Since Carbide 2.0.4</p>
 <ul>
-  <li>Added <em> com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration#getBuildArgumentsInfoCopy( )</em>.</li>
+  <li>Added setter methods for SBSv1 (abld) arguments in <em> com.nokia.carbide.cdt.builder.project.IBuildArgumentsInfo</em>.</li>
 </ul>
 <ul>
-  <li>Added <em> com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration#setBuildArgumentsInfo(BuildArgumentsInfo bldArgInfo)</em>.</li>
+  <li>Added <em> com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration#setBuildArgumentsInfo(IBuildArgumentsInfo bldArgInfo)</em>.</li>
 </ul>
 
 <h3>Deprecated APIs</h3>
@@ -92,10 +92,11 @@
   <li>None </li>
 </ul>
 
-<p>Since Carbide 2.0.4</p>
+<p>Since Carbide 2.1</p>
 <ul>
-  <li><i>com.nokia.carbide.cdt.builder.project.IBuildArgumentsInfo</i></li>
-  <li><i>com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration#getBuildArgumentsInfo( )</i></li>
+  <li><i>com.nokia.carbide.cdt.builder.builder.CarbideCPPBuilder.generateAbldMakefileIfNecessary(ICarbideBuildConfiguration
+config, CarbideCommandLauncher launcher, IPath componentPath, boolean isTest)
+   </i></li>
 </ul>
 
 <h3>Removed APIs</h3>
@@ -125,3 +126,31 @@
 <div id="footer">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></div>
 </div></body>
 </html>
+
+<h3>Removed APIs</h3>
+<p>The following Carbide APIs have been removed and are no longer available to plug-ins.</p>
+<p>Since Carbide 1.2.0</p>
+<ul>
+  <li><i>N/A</i></li>
+</ul>
+<p>Since Carbide 1.2.1</p>
+<ul>
+  <li><i>N/A</i></li>
+</ul>
+<p>Since Carbide 1.2.2</p>
+<ul>
+  <li><i>Some methods that were not intended to be made public were removed from the following classes and interfaces: </i></li>
+  <ul>
+    <li><i>com.nokia.carbide.cdt.builder.builder.CarbideCPPBuilder</i></li>
+    <li><i>com.nokia.carbide.cdt.builder.ICarbideBuildManager</i></li>
+    <li><i>com.nokia.carbide.cdt.builder.project.ICarbideProjectInfo</i></li>
+    <li><i>com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration</i></li>
+  </ul>
+</ul>
+<p>Since Carbide 2.0</p>
+<ul>
+  <li>None</li>
+</ul>
+<div id="footer">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></div>
+</div></body>
+</html>
--- a/carbidesdk/com.nokia.carbide.cpp.sdk.doc.user/html/reference/extension-points/com_nokia_carbide_templatewizard_wizardTemplate.html	Fri Apr 24 10:31:21 2009 -0500
+++ b/carbidesdk/com.nokia.carbide.cpp.sdk.doc.user/html/reference/extension-points/com_nokia_carbide_templatewizard_wizardTemplate.html	Mon Apr 27 15:07:35 2009 -0500
@@ -1,65 +1,62 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<title>Wizard Template</title>
-<style type="text/css">@import url("PLUGINS_ROOT/org.eclipse.cdt.doc.isv/book.css");</style>
-<style type="text/css">@import url("PLUGINS_ROOT/org.eclipse.cdt.doc.isv/schema.css");</style>
-</HEAD>
-<BODY>
-<H1 style="text-align:center">Wizard Template</H1>
-<p></p>
-<h6 class="CaptionFigColumn SchemaHeader">Identifier: </h6>com.nokia.carbide.templatewizard.wizardTemplate<p></p>
-<h6 class="CaptionFigColumn SchemaHeader">Since: </h6>Carbide.c++ 1.2
-<p></p>
-
-<h6 class="CaptionFigColumn SchemaHeader">Description: </h6>The wizard template extension point registers a template with the Carbide.c++ template wizard. Templates may create projects or classes.
-
-See the the documentation under Tasks > Creating Wizard Templates for more information.<p></p>
-<h6 class="CaptionFigColumn SchemaHeader">Configuration Markup:</h6>
-<p></p>
-<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.template">template</a>+)&gt;</p>
-<p class="code SchemaDtd">&lt;!ATTLIST extension</p>
-<p class="code SchemaDtdAttlist">point&nbsp;CDATA #REQUIRED<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class="code SchemaDtdAttlist">name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
-<p></p>
-<ul class="ConfigMarkupAttlistDesc">
-</ul>
-<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.template">template</a> EMPTY&gt;</p>
-<p class="code SchemaDtd">&lt;!ATTLIST template</p>
-<p class="code SchemaDtdAttlist">templateId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class="code SchemaDtdAttlist">location&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class="code SchemaDtdAttlist">wizardId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class="code SchemaDtdAttlist">groupLabel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class="code SchemaDtdAttlist">filterArguments&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class="code SchemaDtdAttlist">image&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class="code SchemaDtdAttlist">extraPagesProvider&nbsp;CDATA #IMPLIED&gt;</p>
-<p></p>
-<p class="ConfigMarkupElementDesc">
-The template element registers a single template with the template wizard.</p>
-<br>
-<ul class="ConfigMarkupAttlistDesc">
-<li><b>templateId</b> - The unique id for this template</li>
-<li><b>location</b> - The plugin-relative path to the template xml file</li>
-<li><b>wizardId</b> - The id of the wizard in which this template is used</li>
-<li><b>groupLabel</b> - The group label under which this template will appear in the template choice page of the appropriate template wizard</li>
-<li><b>filterArguments</b> - The optional wizard-specific data available for the IFilter implementing a filter checkbox, optionally shown in some template wizards</li>
-<li><b>image</b> - The optional plugin-relative location of a 16x16 pixel image file to use when showing this template in the choose template wizard page</li>
-<li><b>extraPagesProvider</b> - An optional provider of extra wizard pages</li>
-</ul>
-<br><h6 class="CaptionFigColumn SchemaHeader">Examples: </h6><pre class="Example"><span class="code SchemaTag">
-&lt;extension point=</span><span class="code SchemaCstring">&quot;com.nokia.carbide.templatewizard.wizardTemplate&quot;</span><span class="code SchemaTag">&gt;
-  &lt;template
-   templateId=</span><span class="code SchemaCstring">&quot;com.nokia.cdt.templates.s60.controlapplication&quot;</span><span class="code SchemaTag">
-   location=</span><span class="code SchemaCstring">&quot;templates/projecttemplates/S60-ControlApplication/template.xml&quot;</span><span class="code SchemaTag">
-   wizardId=</span><span class="code SchemaCstring">&quot;com.nokia.carbide.cpp.project.ui.wizards.NewSymbianOSCppProjectWizard&quot;</span><span class="code SchemaTag"> 
-   groupLabel=</span><span class="code SchemaCstring">&quot;S60&quot;</span><span class="code SchemaTag">
-   filterArguments=</span><span class="code SchemaCstring">&quot;S60:1.2;2.0-2.9&quot;</span><span class="code SchemaTag">
-   image=</span><span class="code SchemaCstring">&quot;icons/icon_S60.png&quot;</span><span class="code SchemaTag">
-  /&gt;
-&lt;/extension&gt;
-</span></pre>
-<p></p>
-
-<h6 class="CaptionFigColumn SchemaHeader">Supplied Implementation: </h6>This extension point registers an XML template. Implementation is not required.
-<p></p>
-
-<br>
-<p class="note SchemaCopyright">
-(C) Copyright 2007 Nokia Corporation.
-
-</p>
-</BODY>
-</HTML>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Wizard Template</title>
+<link rel="StyleSheet" href="../../../book.css" type="text/css"/>
+</HEAD>
+<BODY>
+<H1 style="text-align:center">Wizard Template</H1>
+<p></p>
+<h6 class="CaptionFigColumn SchemaHeader">Identifier: </h6>com.nokia.carbide.templatewizard.wizardTemplate<p></p>
+<h6 class="CaptionFigColumn SchemaHeader">Since: </h6>Carbide.c++ 1.2
+<p></p>
+
+<h6 class="CaptionFigColumn SchemaHeader">Description: </h6>The wizard template extension point registers a template with the Carbide.c++ template wizard. Templates may create projects or classes.
+
+See the the documentation under Tasks > Creating Wizard Templates for more information.<p></p>
+<h6 class="CaptionFigColumn SchemaHeader">Configuration Markup:</h6>
+<p></p>
+<p class="code SchemaDtd">&lt;!ELEMENT <a name="e.extension">extension</a> (<a href="#e.template">template</a>+)&gt;</p>
+<p class="code SchemaDtd">&lt;!ATTLIST extension</p>
+<p class="code SchemaDtdAttlist">point&nbsp;CDATA #REQUIRED<p class="code SchemaDtdAttlist">id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class="code SchemaDtdAttlist">name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<ul class="ConfigMarkupAttlistDesc">
+</ul>
+<br><p class="code SchemaDtd">&lt;!ELEMENT <a name="e.template">template</a> EMPTY&gt;</p>
+<p class="code SchemaDtd">&lt;!ATTLIST template</p>
+<p class="code SchemaDtdAttlist">templateId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class="code SchemaDtdAttlist">location&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class="code SchemaDtdAttlist">wizardId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class="code SchemaDtdAttlist">groupLabel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class="code SchemaDtdAttlist">filterArguments&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class="code SchemaDtdAttlist">image&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class="code SchemaDtdAttlist">extraPagesProvider&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class="ConfigMarkupElementDesc">
+The template element registers a single template with the template wizard.</p>
+<br>
+<ul class="ConfigMarkupAttlistDesc">
+<li><b>templateId</b> - The unique id for this template</li>
+<li><b>location</b> - The plugin-relative path to the template xml file</li>
+<li><b>wizardId</b> - The id of the wizard in which this template is used</li>
+<li><b>groupLabel</b> - The group label under which this template will appear in the template choice page of the appropriate template wizard</li>
+<li><b>filterArguments</b> - The optional wizard-specific data available for the IFilter implementing a filter checkbox, optionally shown in some template wizards</li>
+<li><b>image</b> - The optional plugin-relative location of a 16x16 pixel image file to use when showing this template in the choose template wizard page</li>
+<li><b>extraPagesProvider</b> - An optional provider of extra wizard pages</li>
+</ul>
+<br><h6 class="CaptionFigColumn SchemaHeader">Examples: </h6><pre class="Example"><span class="code SchemaTag">
+</span><span class="code">&lt;extension point=&quot;com.nokia.carbide.templatewizard.wizardTemplate&quot;&gt;
+  &lt;template
+   templateId=&quot;com.nokia.cdt.templates.s60.controlapplication&quot;
+   location=&quot;templates/projecttemplates/S60-ControlApplication/template.xml&quot;
+   wizardId=&quot;com.nokia.carbide.cpp.project.ui.wizards.NewSymbianOSCppProjectWizard&quot; 
+   groupLabel=&quot;S60&quot;
+   filterArguments=&quot;S60:1.2;2.0-2.9&quot;
+   image=&quot;icons/icon_S60.png&quot;
+  /&gt;
+&lt;/extension&gt;
+</span></pre>
+<p></p>
+
+<h6 class="CaptionFigColumn SchemaHeader">Supplied Implementation: </h6>This extension point registers an XML template. Implementation is not required.
+<p></p>
+
+<br>
+<div id="footer">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>
+License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></div>
+</BODY>
+</HTML>
--- a/carbidesdk/com.nokia.carbide.cpp.sdk.doc.user/html/reference/extension-points/templatewizard_wizardTemplate.html	Fri Apr 24 10:31:21 2009 -0500
+++ b/carbidesdk/com.nokia.carbide.cpp.sdk.doc.user/html/reference/extension-points/templatewizard_wizardTemplate.html	Mon Apr 27 15:07:35 2009 -0500
@@ -1,65 +1,66 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<HTML>
-<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-<title>Wizard Template</title>
-<!-- <style>@import url("PLUGINS_ROOT/org.eclipse.cdt.doc.isv/book.css");</style>
-<style>@import url("PLUGINS_ROOT/org.eclipse.cdt.doc.isv/schema.css");</style> -->
-<link rel="StyleSheet" href="../../../book.css" type="text/css"/>
-</HEAD>
-<BODY>
-<H1>Wizard Template</H1>
-<p></p>
-<h5 class=CaptionFigColumn id=header>Identifier:</h5>
-<p>com.nokia.carbide.templatewizard.wizardTemplate</p>
-<h5 class=CaptionFigColumn id=header>Since: </h5>
-Carbide.c++ 1.2
-
-<h5 class=CaptionFigColumn id=header>Description: </h5>
-The wizard template extension point registers a template with the Carbide.c++ template wizard. Templates may create projects or classes.
-
-Refer to the documentation under Tasks > Creating Wizard Templates for more information.
-<h5 class=CaptionFigColumn id=header>Configuration Markup:</h5>
-<p class=code id=dtd>&lt;!ELEMENT extension (template+)&gt;</p>
-<p class=code id=dtd>&lt;!ATTLIST extension</p>
-<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
-<br>
-<p class=code id=dtd>&lt;!ELEMENT template EMPTY&gt;</p>
-<p class=code id=dtd>&lt;!ATTLIST template</p>
-<p class=code id=dtdAttlist>templateId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>location&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>wizardId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>groupLabel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>filterArguments&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>image&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>extraPagesProvider&nbsp;CDATA #IMPLIED&gt;</p>
-<p></p>
-<p class=ConfigMarkup id=elementDesc>
-The template element registers a single template with the template wizard.</p>
-<br>
-<ul class=ConfigMarkup id=attlistDesc>
-<li><b>templateId</b> - The unique id for this template</li>
-<li><b>location</b> - The plugin-relative path to the template xml file</li>
-<li><b>wizardId</b> - The id of the wizard in which this template is used</li>
-<li><b>groupLabel</b> - The group label under which this template will appear in the template choice page of the appropriate template wizard</li>
-<li><b>filterArguments</b> - The optional wizard-specific data available for the IFilter implementing a filter checkbox, optionally shown in some template wizards</li>
-<li><b>image</b> - The optional plugin-relative location of a 16x16 pixel image file to use when showing this template in the choose template wizard page</li>
-<li><b>extraPagesProvider</b> - An optional provider of extra wizard pages</li>
-</ul>
-<br>
-<h5 class=CaptionFigColumn id=header>Examples:</h5>
-<pre><p class=code id=tag>&lt;extension point=&quot;com.nokia.carbide.templatewizard.wizardTemplate&quot;&gt;<p class=code id=tag>&lt;template
-   templateId=&quot;com.nokia.cdt.templates.s60.controlapplication&quot;<br>   location=&quot;templates/projecttemplates/S60-ControlApplication/template.xml&quot;
-   wizardId=&quot;com.nokia.carbide.cpp.project.ui.wizards.NewSymbianOSCppProjectWizard&quot;
-   groupLabel=&quot;S60&quot;
-   filterArguments=&quot;S60:1.2;2.0-2.9&quot;
-   image=&quot;icons/icon_S60.png&quot;
-  /&gt;
-<p class=code id=tag>&lt;/extension&gt;</p></pre>
-<h5 class=CaptionFigColumn id=header>API Information: </h5>
-No API implementation is required to provide a basic template. Templates requiring custom processing in code may implement <code class="code">com.nokia.carbide.templatewizard.process.IProcess</code>
-<p></p>
-
-<h5 class=CaptionFigColumn id=header>Supplied Implementation:</h5>
-<p>This extension point registers an XML template. Implementation is not required.</p>
-<h5>Related Information</h5>
-<p><a href="../../tasks/CreatingWizardTemplates.htm">Creating Wizard Templates</a><br>
-</p>
-<div id="footer">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></div>
-<p>
-
-</BODY>
-</HTML>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<HTML>
+<HEAD><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+<title>Wizard Template</title>
+<!-- <style>@import url("PLUGINS_ROOT/org.eclipse.cdt.doc.isv/book.css");</style>
+<style>@import url("PLUGINS_ROOT/org.eclipse.cdt.doc.isv/schema.css");</style> -->
+<link rel="StyleSheet" href="../../../book.css" type="text/css"/>
+</HEAD>
+<BODY>
+<H1>Wizard Template</H1>
+<p></p>
+<h5 class=CaptionFigColumn id=header>Identifier:</h5>
+<p class="code">com.nokia.carbide.templatewizard.wizardTemplate</p>
+<h5 class=CaptionFigColumn id=header>Since: </h5>
+Carbide.c++ 1.2
+
+<h5 class=CaptionFigColumn id=header>Description: </h5>
+The wizard template extension point registers a template with the Carbide.c++ template wizard. Templates may create projects or classes.
+
+Refer to the documentation under Tasks > Creating Wizard Templates for more information.
+<h5 class=CaptionFigColumn id=header>Configuration Markup:</h5>
+<p class=code id=dtd>&lt;!ELEMENT extension (template+)&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST extension</p>
+<p class=code id=dtdAttlist>point&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>id&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>name&nbsp;&nbsp;CDATA #IMPLIED&gt;</p>
+<br>
+<p class=code id=dtd>&lt;!ELEMENT template EMPTY&gt;</p>
+<p class=code id=dtd>&lt;!ATTLIST template</p>
+<p class=code id=dtdAttlist>templateId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>location&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>wizardId&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>groupLabel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #REQUIRED<p class=code id=dtdAttlist>filterArguments&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>image&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CDATA #IMPLIED<p class=code id=dtdAttlist>extraPagesProvider&nbsp;CDATA #IMPLIED&gt;</p>
+<p></p>
+<p class=ConfigMarkup id=elementDesc>
+The template element registers a single template with the template wizard.</p>
+<br>
+<ul class=ConfigMarkup id=attlistDesc>
+<li><b>templateId</b> - The unique id for this template</li>
+<li><b>location</b> - The plugin-relative path to the template xml file</li>
+<li><b>wizardId</b> - The id of the wizard in which this template is used</li>
+<li><b>groupLabel</b> - The group label under which this template will appear in the template choice page of the appropriate template wizard</li>
+<li><b>filterArguments</b> - The optional wizard-specific data available for the IFilter implementing a filter checkbox, optionally shown in some template wizards</li>
+<li><b>image</b> - The optional plugin-relative location of a 16x16 pixel image file to use when showing this template in the choose template wizard page</li>
+<li><b>extraPagesProvider</b> - An optional provider of extra wizard pages</li>
+</ul>
+<br>
+<h5 class=CaptionFigColumn id=header>Examples:</h5>
+<pre><p class=code id=tag>&lt;extension point=&quot;com.nokia.carbide.templatewizard.wizardTemplate&quot;&gt;<p class=code id=tag>&lt;!-- Register application template for Yadda Yadda company --&gt;
+&lt;template
+   templateId=&quot;com.yadda.templates.application&quot;<br>   location=&quot;templates/projecttemplates/Yadda-Application/template.xml&quot;
+   wizardId=&quot;com.yaddayadda.wizards.NewYaddaProjectWizard&quot;
+   groupLabel=&quot;YaddaYadda&quot;
+   filterArguments=&quot;Yadda:1.2;2.0-4.0&quot;
+   image=&quot;icons/icon_yadda_yadda.png&quot;
+  /&gt;
+<p class=code id=tag>&lt;/extension&gt;</p></pre>
+<h5 class=CaptionFigColumn id=header>API Information: </h5>
+No API implementation is required to provide a basic template. Templates requiring custom processing in code may implement <code class="code">com.nokia.carbide.templatewizard.process.IProcess</code>
+<p></p>
+
+<h5 class=CaptionFigColumn id=header>Supplied Implementation:</h5>
+<p>This extension point registers an XML template. Implementation is not required.</p>
+<h5>Related Information</h5>
+<p><a href="../../tasks/CreatingWizardTemplates.htm">Creating Wizard Templates</a><br>
+</p>
+<div id="footer">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></div>
+<p>
+
+</BODY>
+</HTML>
--- a/connectivity/com.nokia.tcf.test/src/com/nokia/tcf/test/TestOSTTRKNoFormat.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/connectivity/com.nokia.tcf.test/src/com/nokia/tcf/test/TestOSTTRKNoFormat.java	Mon Apr 27 15:07:35 2009 -0500
@@ -38,13 +38,17 @@
  */
 public class TestOSTTRKNoFormat extends TestCase {
 
+	private boolean startServer = true; // use false when doing Junit plugin test - use true when doing non-plugin junit test
+
 	public void testOstTRK() {
 		// for non-plugin junit test
 		TCAPIConnection api2 = new TCAPIConnection();
-		api2.nativeStartServer();
+		if (startServer) {
+			api2.nativeStartServer();
+		}
 
 		// connection
-		ITCVirtualSerialConnection conn = (ITCVirtualSerialConnection)TCFClassFactory.createITCVirtualSerialConnection("COM19");
+		ITCVirtualSerialConnection conn = (ITCVirtualSerialConnection)TCFClassFactory.createITCVirtualSerialConnection("COM27");
 		// set OST decoding for this connection
 		conn.setDecodeFormat("ost");
 		
@@ -188,7 +192,9 @@
 			}
 		}
 		// for non-plugin junit test
-		api2.nativeStopServer();
+		if (startServer) {
+			api2.nativeStopServer();
+		}
 	}
 
 }
--- a/connectivity/com.nokia.tcf.test/src/com/nokia/tcf/test/TestOSTVersionRequest.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/connectivity/com.nokia.tcf.test/src/com/nokia/tcf/test/TestOSTVersionRequest.java	Mon Apr 27 15:07:35 2009 -0500
@@ -21,7 +21,6 @@
 import org.eclipse.core.runtime.IStatus;
 
 import com.nokia.tcf.api.ITCAPIConnection;
-import com.nokia.tcf.api.ITCConnection;
 import com.nokia.tcf.api.ITCMessage;
 import com.nokia.tcf.api.ITCMessageIds;
 import com.nokia.tcf.api.ITCMessageInputStream;
@@ -37,13 +36,17 @@
  */
 public class TestOSTVersionRequest extends TestCase {
 
+	private boolean startServer = true; // use false when doing Junit plugin test - use true when doing non-plugin junit test
+
 	public void testOSTVersionRequest() {
 		// for non-plugin junit test
 		TCAPIConnection api2 = new TCAPIConnection();
-		api2.nativeStartServer();
+		if (startServer) {
+			api2.nativeStartServer();
+		}
 
 		// connection
-		ITCVirtualSerialConnection conn = (ITCVirtualSerialConnection)TCFClassFactory.createITCVirtualSerialConnection("COM25");
+		ITCVirtualSerialConnection conn = (ITCVirtualSerialConnection)TCFClassFactory.createITCVirtualSerialConnection("COM27");
 		// set OST decoding for this connection
 		conn.setDecodeFormat("ost");
 		
@@ -135,6 +138,8 @@
 			}
 		}
 		// for non-plugin junit test
-		api2.nativeStopServer();
+		if (startServer) {
+			api2.nativeStopServer();
+		}
 	}
 }
--- a/connectivity/com.nokia.tcf.test/src/com/nokia/tcf/test/TestOstTRK.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/connectivity/com.nokia.tcf.test/src/com/nokia/tcf/test/TestOstTRK.java	Mon Apr 27 15:07:35 2009 -0500
@@ -31,13 +31,17 @@
  */
 public class TestOstTRK extends TestCase {
 
+	private boolean startServer = true; // use false when doing Junit plugin test - use true when doing non-plugin junit test
+	
 	public void testOstTRK() {
 		// for non-plugin junit test
 		TCAPIConnection api2 = new TCAPIConnection();
-		api2.nativeStartServer();
+		if (startServer) {
+			api2.nativeStartServer();
+		}
 
 		// connection
-		ITCVirtualSerialConnection conn = (ITCVirtualSerialConnection)TCFClassFactory.createITCVirtualSerialConnection("COM25");
+		ITCVirtualSerialConnection conn = (ITCVirtualSerialConnection)TCFClassFactory.createITCVirtualSerialConnection("COM27");
 		// set OST decoding for this connection
 		conn.setDecodeFormat("ost");
 		
@@ -180,8 +184,10 @@
 				api.disconnect();
 			}
 		}
-		// for non-plugin junit test
-		api2.nativeStopServer();
+		if (startServer) {
+			// for non-plugin junit test
+			api2.nativeStopServer();
+		}
 		
 	}
 }
--- a/connectivity/com.nokia.tcf.test/src/com/nokia/tcf/test/TestPlatSim.java	Fri Apr 24 10:31:21 2009 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,146 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-package com.nokia.tcf.test;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-import org.eclipse.core.runtime.IStatus;
-
-import com.nokia.tcf.api.ITCAPIConnection;
-import com.nokia.tcf.api.ITCMessage;
-import com.nokia.tcf.api.ITCMessageIds;
-import com.nokia.tcf.api.ITCMessageInputStream;
-import com.nokia.tcf.api.ITCMessageOptions;
-import com.nokia.tcf.api.ITCRealTCPConnection;
-import com.nokia.tcf.api.TCFClassFactory;
-import com.nokia.tcf.impl.TCAPIConnection;
-
-import junit.framework.TestCase;
-
-/**
- *
- */
-public class TestPlatSim extends TestCase {
-
-	public void testPlatSim() {
-		// connection
-		ITCRealTCPConnection conn = (ITCRealTCPConnection)TCFClassFactory.createITCRealTCPConnection("127.0.0.1", "7654");
-		// set platsim decoding for this connection
-		conn.setDecodeFormat("platsim");
-		
-		// message options
-		ITCMessageOptions options = TCFClassFactory.createITCMessageOptions();
-		// Ask TCF to encode the protocol (we will send raw messages)
-		options.setMessageEncodeFormat(ITCMessageOptions.ENCODE_FORMAT);
-		// ask TCF to delete the protocol on incoming messages
-		options.setUnWrapFormat(ITCMessageOptions.UNWRAP_DELETE_HEADERS);
-		options.setInputStreamSize(64);
-		
-		// Message ID to capture is 0x32 (TraceCore configure response)
-		ITCMessageIds ids = TCFClassFactory.createITCMessageIds();
-		ids.addMessageId((byte)0x32); // Tracecore response
-
-		// TraceCore configure message
-		// RAW message
-		byte[] tcConfigMsg = {0x1, 0x1, 0x0, 0x0};
-		// convert to ITCMessage
-		ITCMessage tcTCFConfigMsg = TCFClassFactory.createITCMessage(tcConfigMsg);
-		// Use the TraceCore configure message req ID (0x31)
-		tcTCFConfigMsg.setUseMyMessageId(true, (byte)0x31);
-
-		// uncomment this to do a non-plugin Junit
-		TCAPIConnection api2 = new TCAPIConnection();
-		api2.nativeStartServer();
-
-		int iconnect = 0;
-		for (iconnect=0; iconnect < 1; iconnect++) {
-			// connect
-			ITCAPIConnection api = TCFClassFactory.createITCAPIConnection();
-			IStatus connStatus = api.connect(conn, options, ids);
-			System.out.printf("iconnect=%d connStatus=%d\n", iconnect, connStatus.getCode());
-			
-			// get stream reference
-			ITCMessageInputStream stream = null;
-			if (connStatus.isOK()) {
-				stream = api.getInputStream();
-				System.out.printf("stream=%s\n", stream.toString());
-			}
-			
-			// send trk ping
-			if (connStatus.isOK()) {
-				IStatus sendStatus = api.sendMessage(tcTCFConfigMsg);
-				if (sendStatus.isOK()) {
-					// wait for response
-					int numberMessages = 0;
-					int numberPeeks = 0;
-					int numberSleeps = 0;
-					for (int i = 0; i < 100; i ++) {
-						try {
-							if (stream != null)
-								numberMessages = stream.peekMessages();
-							numberPeeks++;
-							if (numberMessages < 1) {
-								try {
-									Thread.sleep(100);
-									numberSleeps++;
-								} catch (InterruptedException e) {
-									e.printStackTrace();
-								}
-							}
-						} catch (IOException e) {
-							e.printStackTrace();
-						}
-						if (numberMessages >= 1) {
-							break;
-						}
-					}
-					System.out.printf("NumberMessages = %d numberPeeks = %d numberSleeps = %d\n", numberMessages, numberPeeks, numberSleeps);
-					if (numberMessages > 0) {
-						try {
-							
-//							ITCMessage[] message = stream.readMessages(1);
-//							byte[] b = stream.readBytes(1);
-							ByteBuffer barray = java.nio.ByteBuffer.wrap(stream.readBytes(1));
-//							byte[] b = message[0].getMessage();
-							System.out.printf("msg: length=%d\n", barray.limit());
-							byte[] b = barray.array();
-							for (int i = 0; i < b.length; i++) {
-								System.out.printf("%x ", b[i]);
-							}
-							System.out.printf("\n");
-							numberMessages = stream.peekMessages();
-						} catch (IOException e) {
-							e.printStackTrace();
-						}
-					}
-				}
-				if (connStatus.isOK()) {
-					api.disconnect();
-				}
-				try {
-					Thread.sleep(1000);
-				} catch (InterruptedException e) {
-					e.printStackTrace();
-				}
-			}
-		}
-		// uncomment this when using a non-plugin junit test
-		api2.nativeStopServer();
-	}
-}
--- a/connectivity/com.nokia.tcf.test/src/com/nokia/tcf/test/TestPlatSimTRK.java	Fri Apr 24 10:31:21 2009 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,204 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-
-package com.nokia.tcf.test;
-
-import java.io.IOException;
-import java.nio.ByteBuffer;
-
-import org.eclipse.core.runtime.IStatus;
-
-import com.nokia.tcf.api.ITCMessage;
-import com.nokia.tcf.api.ITCMessageIds;
-import com.nokia.tcf.api.ITCMessageInputStream;
-import com.nokia.tcf.api.ITCMessageOptions;
-import com.nokia.tcf.api.ITCRealTCPConnection;
-import com.nokia.tcf.api.ITCAPIConnection;
-import com.nokia.tcf.api.TCFClassFactory;
-import com.nokia.tcf.impl.TCAPIConnection;
-
-import junit.framework.TestCase;
-
-/**
- *
- */
-public class TestPlatSimTRK extends TestCase {
-
-	public void testPlatSimTRK() {
-		// connection
-		// PlatSim 
-		ITCRealTCPConnection conn = (ITCRealTCPConnection)TCFClassFactory.createITCRealTCPConnection("127.0.0.1", "7654");
-		conn.setDecodeFormat("platsim");
-
-		// message options
-		ITCMessageOptions options = TCFClassFactory.createITCMessageOptions();
-		// Ask TCF to encode the protocol (we will send raw TRK messages)
-		options.setMessageEncodeFormat(ITCMessageOptions.ENCODE_FORMAT);
-		// ask TCF to delete the protocol on incoming messages
-		options.setUnWrapFormat(ITCMessageOptions.UNWRAP_DELETE_HEADERS);
-//		options.setInputStreamOverflowOption(ITCMessageOptions.INPUTSTREAM_OVERFLOW_NONE);
-		options.setInputStreamSize(64);
-		
-		// message Ids to capture (we must capture TRK response messages = id=0x45)
-		ITCMessageIds ids = TCFClassFactory.createITCMessageIds();
-		// The PN msg ID for TRK responses is 0x45 per DSS
-		ids.addMessageId((byte)0x45); // TRK response
-
-		// TRK ping message
-		// RAW message
-		byte[] trkping = {0x7e, 0, 0, (byte)0xff, 0x7e};
-		// convert to ITCMessage
-		ITCMessage tcMsgPing = TCFClassFactory.createITCMessage(trkping);
-		// Ask TCF to use the PN msg ID for TRK requests (0x44) per DSS
-		tcMsgPing.setUseMyMessageId(true, (byte)0x44);
-		
-		// TRK version message
-		// RAW message
-		byte[] trkversion = {0x7e, 0x08, 0x01, (byte)0xf6, 0x7e};
-		// convert to ITCMessage
-		ITCMessage tcMsgVersion = TCFClassFactory.createITCMessage(trkversion);
-		// Ask TCF to use the PN msg ID for TRK requests (0x44) per DSS
-		tcMsgVersion.setUseMyMessageId(true, (byte)0x44);
-
-		// uncomment this to do a non-plugin Junit
-		TCAPIConnection api2 = new TCAPIConnection();
-		api2.nativeStartServer();
-
-		int iconnect = 0;
-		for (iconnect=0; iconnect < 1; iconnect++) {
-			// connect
-			ITCAPIConnection api = TCFClassFactory.createITCAPIConnection();
-			IStatus connStatus = api.connect(conn, options, ids);
-			System.out.printf("iconnect=%d connStatus=%d\n", iconnect, connStatus.getCode());
-			
-			// get stream reference
-			ITCMessageInputStream stream = null;
-			if (connStatus.isOK()) {
-				stream = api.getInputStream();
-				System.out.printf("stream=%s\n", stream.toString());
-			}
-			
-			// send trk ping
-			if (connStatus.isOK()) {
-				IStatus sendStatus = api.sendMessage(tcMsgPing);
-				if (sendStatus.isOK()) {
-					// wait for response
-					int numberMessages = 0;
-					int numberPeeks = 0;
-					int numberSleeps = 0;
-					for (int i = 0; i < 200; i ++) {
-						try {
-							if (stream != null)
-								numberMessages = stream.peekMessages();
-							numberPeeks++;
-							if (numberMessages < 1) {
-								try {
-									Thread.sleep(100);
-									numberSleeps++;
-								} catch (InterruptedException e) {
-									e.printStackTrace();
-								}
-							}
-						} catch (IOException e) {
-							e.printStackTrace();
-						}
-						if (numberMessages >= 1) {
-							break;
-						}
-					}
-					System.out.printf("NumberMessages = %d numberPeeks = %d numberSleeps = %d\n", numberMessages, numberPeeks, numberSleeps);
-					if (numberMessages > 0) {
-						try {
-							
-//							ITCMessage[] message = stream.readMessages(1);
-//							byte[] b = stream.readBytes(1);
-							ByteBuffer barray = java.nio.ByteBuffer.wrap(stream.readBytes(1));
-//							byte[] b = message[0].getMessage();
-							System.out.printf("msg: length=%d\n", barray.limit());
-							byte[] b = barray.array();
-							for (int i = 0; i < b.length; i++) {
-								System.out.printf("%x ", b[i]);
-							}
-							System.out.printf("\n");
-							numberMessages = stream.peekMessages();
-						} catch (IOException e) {
-							e.printStackTrace();
-						}
-					}
-				}
-			}
-			// send trk version
-			if (connStatus.isOK()) {
-				IStatus sendStatus = api.sendMessage(tcMsgVersion); 
-				if (sendStatus.isOK()) {
-					// wait for response
-					int numberMessages = 0;
-					int numberPeeks = 0;
-					int numberSleeps = 0;
-					for (int i = 0; i < 200; i ++) {
-						try {
-							if (stream != null)
-								numberMessages = stream.peekMessages();
-							numberPeeks++;
-							if (numberMessages < 1) {
-								try {
-									Thread.sleep(100);
-									numberSleeps++;
-								} catch (InterruptedException e) {
-									e.printStackTrace();
-								}
-							}
-						} catch (IOException e) {
-							e.printStackTrace();
-						}
-						if (numberMessages == 1) {
-							break;
-						}
-					}
-					System.out.printf("NumberMessages = %d numberPeeks = %d numberSleeps = %d\n", numberMessages, numberPeeks, numberSleeps);
-					if (numberMessages > 0) {
-						try {
-							
-							ITCMessage message = stream.readMessage();
-							byte[] b = message.getMessage();
-							System.out.printf("msg: length=%d\n", b.length);
-							for (int i = 0; i < b.length; i++) {
-								System.out.printf("%x ", b[i]);
-							}
-							System.out.printf("\n");
-							numberMessages = stream.peekMessages();
-						} catch (IOException e) {
-							e.printStackTrace();
-						}
-					}
-				}
-			}
-			
-			if (connStatus.isOK()) {
-				api.disconnect();
-			}
-			try {
-				Thread.sleep(1000);
-			} catch (InterruptedException e) {
-				e.printStackTrace();
-			}
-		}
-		// uncomment this when using a non-plugin junit test
-		api2.nativeStopServer();
-		
-	}
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf.test/src/com/nokia/tcf/test/TestServerStartStop.java	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+package com.nokia.tcf.test;
+
+import com.nokia.tcf.impl.TCAPIConnection;
+
+import junit.framework.TestCase;
+
+public class TestServerStartStop extends TestCase {
+
+	public void testServerStartStop() {
+		// for non-plugin junit test
+		TCAPIConnection api2 = new TCAPIConnection();
+		api2.nativeStartServer();
+		
+		// for non-plugin junit test
+		api2.nativeStopServer();
+	}
+}
--- a/connectivity/com.nokia.tcf.test/src/com/nokia/tcf/test/TestVirtualSerial.java	Fri Apr 24 10:31:21 2009 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,148 +0,0 @@
-/*
-* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description: 
-*
-*/
-package com.nokia.tcf.test;
-
-import java.io.IOException;
-
-import org.eclipse.core.runtime.IStatus;
-
-import com.nokia.tcf.api.ITCAPIConnection;
-import com.nokia.tcf.api.ITCMessage;
-import com.nokia.tcf.api.ITCMessageIds;
-import com.nokia.tcf.api.ITCMessageInputStream;
-import com.nokia.tcf.api.ITCMessageOptions;
-import com.nokia.tcf.api.ITCVirtualSerialConnection;
-import com.nokia.tcf.api.ITCConnection;
-import com.nokia.tcf.api.TCFClassFactory;
-import junit.framework.TestCase;
-
-/**
- * 1 client 1 connection RAW TRK (non-TraceCore TRK) over USB
- */
-public class TestVirtualSerial extends TestCase {
-
-	public void testVirtualSerial() {
-//		TCFClassFactory factory = new TCFClassFactory();
-		
-		// connection
-		ITCVirtualSerialConnection conn = (ITCVirtualSerialConnection)TCFClassFactory.createITCVirtualSerialConnection("COM13");
-		conn.setRetryInterval(5);
-		conn.setRetryTimeout(60);
-		String desc = conn.getConnectionDescription();
-		System.out.println(desc);
-		assertTrue("description != null", desc != null);
-		
-		// messageIds
-		ITCMessageIds messageIds = TCFClassFactory.createITCMessageIds();
-		messageIds.addMessageId((byte)0x7E);
-		
-		// messageOptions - all default
-		ITCMessageOptions messageOptions = TCFClassFactory.createITCMessageOptions();
-		conn.setDecodeFormat("rawtrk");
-		messageOptions.setMessageEncodeFormat(ITCMessageOptions.ENCODE_NO_FORMAT);
-		ITCAPIConnection api = TCFClassFactory.createITCAPIConnection();
-		IStatus connStatus = api.connect(conn, messageOptions, messageIds);
-		assertTrue("connect is not ok", connStatus.isOK());
-
-		// message
-		int[] trkpingi = {0x7e, 00, 00, 0xff, 0x7e};
-		byte[] trkping = new byte[5];
-		for (int i = 0; i < 5; i++) trkping[i] = (byte)(trkpingi[i] & 0xff);
-		ITCMessage tcMsgPing = TCFClassFactory.createITCMessage(trkping);
-		System.out.println("ping message:");
-		for (int i = 0; i < tcMsgPing.size(); i++) {
-			System.out.printf(" %x", tcMsgPing.getMessage()[i]);			
-		}
-		System.out.printf("\n");
-		tcMsgPing.setUseMyMessageId(false, (byte)0);
-		
-		int[] trkversioni = {0x7e, 0x08, 0x01, 0xf6, 0x7e};
-		byte[] trkversion = new byte[5];
-		for (int i = 0; i < 5; i++) trkversion[i] = (byte)(trkversioni[i] & 0xff);
-		ITCMessage tcMsgVersion = TCFClassFactory.createITCMessage(trkversion);
-		System.out.println("version message:");
-		for (int i = 0; i < tcMsgVersion.size(); i++) {
-			System.out.printf(" %x", tcMsgVersion.getMessage()[i]);			
-		}
-		System.out.printf("\n");
-		tcMsgVersion.setUseMyMessageId(false, (byte)0);
-	
-		
-		IStatus sendStatus = null;
-
-		if (connStatus.isOK()) {
-			sendStatus = api.sendMessage(tcMsgPing);
-			sendStatus = api.sendMessage(tcMsgVersion);
-		}
-
-		ITCMessageInputStream stream = api.getInputStream();
-		ITCMessage msg = null;
-		int numberMessages = 0;
-		try {
-			numberMessages = stream.peekMessages();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		System.out.printf("numberMessages = %d\n", numberMessages);
-		if (numberMessages > 0) {
-			try {
-				msg = stream.readMessage();
-				System.out.printf("messageSize = %d\n", msg.size());
-				if (msg.size() > 0) {
-					for (int i = 0; i < msg.size(); i++) {
-						System.out.printf(" %x", msg.getMessage()[i]);
-					}
-					System.out.printf("\n");
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-
-		// shutdown BT on phone then execute this
-		if (connStatus.isOK()) {
-			sendStatus = api.sendMessage(tcMsgPing);
-			sendStatus = api.sendMessage(tcMsgVersion);
-		}
-		
-		numberMessages = 0;
-		try {
-			numberMessages = stream.peekMessages();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		System.out.printf("numberMessages = %d\n", numberMessages);
-		if (numberMessages > 0) {
-			try {
-				msg = stream.readMessage();
-				System.out.printf("messageSize = %d\n", msg.size());
-				if (msg.size() > 0) {
-					for (int i = 0; i < msg.size(); i++) {
-						System.out.printf(" %x", msg.getMessage()[i]);
-					}
-					System.out.printf("\n");
-				}
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-		if (connStatus.isOK()) {
-			api.disconnect();
-		}
-		
-	}
-}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/ErrorMonitorData.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#ifndef __ERRRORMONITORDATA_H__
+#define __ERRRORMONITORDATA_H__
+
+#include "shareddata.h"
+#include "mutex.h"
+
+// Error memory written by Server for 1 client
+#define MAX_ERRORS			200
+typedef struct tagErrorEntry
+{
+	BOOL osErrorUsed;
+	LONG tcfError;
+	DWORD osError;
+} *pErrorEntry, ErrorEntry;
+typedef struct tagErrorData
+{
+	int first;			// first error in queue
+	int next;			// last error in queue
+	int numberErrors;	// number of errors in queue
+	ErrorEntry errors[MAX_ERRORS];
+} *pErrorData, ErrorData;
+
+
+// base name (each client has different name)
+#define ERRORMONITORDATA_MAP_BASENAME	"TCFErrorMonitorData"
+#define ERRORMONITORDATA_MAP_SIZE		(sizeof(ErrorData))
+
+// mutex to restrict access (each client has different name)
+#define ERRORMONITORDATA_MUTEX_BASENAME		"TCFErrorMonitorMutex"
+#define ERRORMONITORDATA_MUTEX_TIMEOUT		(60000L)
+
+class CErrorMonitorData : public CSharedData
+{
+public:
+	BOOL Init();
+};
+
+class CErrorMonitor
+{
+public:
+	CErrorMonitor();
+	CErrorMonitor(long inClientID);
+	~CErrorMonitor();
+
+	BOOL CreateData();
+	BOOL IsThisClient(long inClientID) { return (inClientID == m_ClientID); }
+	long GetClientId() { return m_ClientID; }
+
+	BOOL PutError(LONG tcfError, BOOL osErrorUsed=FALSE, DWORD osError=0);
+	BOOL GetError(LONG* tcfError, BOOL* osErrorUsed=NULL, DWORD* osError=NULL);
+	void ResetErrorQueue(pErrorData pData) { pData->first = pData->next = pData->numberErrors = 0; }
+	BOOL IsErrorQueueEmpty(pErrorData pData) { return (pData->numberErrors <= 0); }
+	BOOL IsErrorQueueFull(pErrorData pData) { return (pData->numberErrors >= MAX_ERRORS); }
+
+private:
+	pErrorData GetDataPtr() { return (pErrorData)m_Data.GetDataPtr(); }
+
+	BOOL WaitForAccess() { return m_Mutex.Wait(); };
+	BOOL ReleaseAccess() { return m_Mutex.Release(); };
+
+	long m_ClientID;
+	CErrorMonitorData m_Data;
+	Mutex m_Mutex;
+};
+#endif// __ERRRORMONITORDATA_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/InputStream.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,166 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#ifndef __INPUTSTREAM_H__
+#define __INPUTSTREAM_H__
+
+#ifdef TCF_CLIENT
+#include <jni.h>
+#endif
+
+#include "shareddata.h"
+#include "mutex.h"
+#include "TCDebugLog.h"
+#include "ServerClient.h"
+
+#define USE_CIRCULAR_BUFFER
+//
+//  Input Stream - one per client
+//
+
+//----------------------------------
+// Input Stream Mutex
+//----------------------------------
+// Mutex name is basename + clientID
+#define INPUTSTREAMDATA_MUTEX_BASENAME		"TCFInputStreamDataMutex"
+#define INPUTSTREAMDATA_MUTEX_TIMEOUT		(60000L)
+
+//----------------------------------
+// Input Stream Buffer
+//----------------------------------
+typedef BYTE *pInputStreamData;
+// Mapping name is basename + clientID
+#define INPUTSTREAMDATA_MAP_BASENAME	"TCFInputStreamData"
+class CInputStreamData : public CSharedData
+{
+public:
+	BOOL Init();
+};
+
+#ifdef USE_CIRCULAR_BUFFER
+//----------------------------------
+// Input Stream Buffer & File Information
+//----------------------------------
+typedef struct tagInputStreamInfo
+{
+	DWORD numberMessages;			// total messages (buffer and file)
+	DWORD numberBytes;				// total bytes (buffer and file)
+	DWORD numberMessagesInFile;		// number of messages in file
+	DWORD numberBytesInFile;		// number of bytes in file
+	DWORD bufferRead;				// where to read from buffer
+	DWORD bufferPeek;				// where to peek some data from buffer
+	DWORD bufferWrite;				// where to write to buffer
+	DWORD bufferSize;				// current size of buffer
+	DWORD bufferCapacity;			// total capacity of buffer
+} *pInputStreamInfo, InputStreamInfo;
+#else
+//----------------------------------
+// Input Stream Buffer & File Information
+//----------------------------------
+typedef struct tagInputStreamInfo
+{
+	DWORD numberMessages;			// total messages (buffer and file)
+	DWORD numberBytes;				// total bytes (buffer and file)
+	DWORD numberMessagesInFile;		// number of messages in file
+	DWORD numberBytesInFile;		// number of bytes in file
+} *pInputStreamInfo, InputStreamInfo;
+#endif
+// Mapping name is basename + clientID
+#define INPUTSTREAMINFO_MAP_BASENAME	"TCFInputStreamInfo"
+#define INPUTSTREAMINFO_MAP_SIZE		(sizeof(InputStreamInfo))
+
+class CInputStreamInfo : public CSharedData
+{
+public:
+	BOOL Init();
+};
+
+//----------------------------------
+// Input Stream Overflow Files
+//----------------------------------
+#define INPUTSTREAMOVERFLOW_FILE_SIZE		(20*1024*1024L)
+
+typedef BYTE* pInputStreamFile;
+
+// Mapping name is basename + clientID
+#define INPUTSTREAMOVERFLOW_MAP_BASENAME	"TCFInputStreamOverflowFile"
+class CInputStreamFile : public CSharedData
+{
+public:
+	void SetClientId(long id);
+	BOOL Open(DWORD dwSize, CHAR *filePath);
+	BOOL Init();
+	Close();
+
+	long m_ClientID;
+	HANDLE m_hFile; // handle from CreateFile
+};
+
+//----------------------------------
+// Input Stream class
+//----------------------------------
+class CInputStream
+{
+public:
+	CInputStream();
+	CInputStream(CHAR* pOverflowPath, DWORD inBufferSize, BOOL inOverFlowToFile, long inClientID);
+	~CInputStream();
+
+	BOOL CreateStream();
+	long AddMessage(DWORD inLength, BYTE* inMessage);
+	LONG GetNumberMessages();
+
+	DWORD GetNextMessage(DWORD inLength, BYTE* outMessage);
+	DWORD GetNextMessageSize();
+	void GetMessageSizes(long inNumberMessages, DWORD* outMessageSizes);
+	void GetTotalMessageSize(long inNumberMessages, DWORD& outTotalSize);
+	BOOL IsThisClient(long inClientID) { return (inClientID == m_ClientID); }
+	long GetClientId() { return m_ClientID; }
+#ifdef TCF_CLIENT
+	DWORD GetMessages(JNIEnv* env, long inNumberMessages, long inNumberMaxBytes, long& outNumberBytesRead, long& outNumberMessagesRead, jbyteArray outMessageData);
+#endif
+	void UnLockStream() { ReleaseAccess(); }
+
+#ifdef USE_CIRCULAR_BUFFER
+	void DoReadBuffer(pInputStreamInfo pInfo, BYTE* pBuffer, BYTE* outData, DWORD inLength);
+	void DoWriteBuffer(pInputStreamInfo pInfo, BYTE* pBuffer, BYTE* inData, DWORD inLength);
+	void IncrementReadPosition(pInputStreamInfo pInfo, DWORD inLength);
+	void IncrementWritePosition(pInputStreamInfo pInfo, DWORD inLength);
+	void DoPeekBuffer(pInputStreamInfo pInfo, BYTE* pBuffer, BYTE* outData, DWORD inLength);
+	void IncrementPeekPosition(pInputStreamInfo pInfo, DWORD inLength);
+#endif
+
+private:
+	pInputStreamData GetDataPtr() { return (pInputStreamData)m_Data.GetDataPtr(); }
+	pInputStreamInfo GetInfoPtr() { return (pInputStreamInfo)m_Info.GetDataPtr(); }
+	pInputStreamFile GetFilePtr() { if (m_File == NULL) return NULL; else return (pInputStreamFile)m_File->GetDataPtr(); }
+
+	BOOL WaitForAccess() { if (m_StreamLocked) return TRUE; else { m_StreamLocked = TRUE; return m_Mutex.Wait();} };
+	BOOL ReleaseAccess() { if (m_StreamLocked) { m_StreamLocked = FALSE; return m_Mutex.Release();} else return TRUE; };
+
+	long m_ClientID;
+	Mutex m_Mutex;
+	CInputStreamData m_Data;
+	CInputStreamInfo m_Info;
+	DWORD m_BufferSize;
+	DWORD m_FileSize;
+	CHAR m_OverFlowBaseName[MAX_FILEPATH];
+	BOOL m_OverFlowToFile;
+	CInputStreamFile* m_File;
+	BOOL m_StreamLocked;
+};
+
+#endif __INPUTSTREAM_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/PSerialCommPref.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,103 @@
+/*
+ *  PSerialCommPref.h 
+ *
+ *  Copyright 2002 metrowerks inc.  All rights reserved.
+ *
+ */
+
+#ifndef __PSERIALCOMMPREF_H__
+#define __PSERIALCOMMPREF_H__
+
+//#include "DEPrefTypes.h"
+
+enum menu_port
+{
+	PortCOM1=0,
+	PortCOM2=1,
+	PortCOM3=2,
+	PortCOM4=3,
+	PortCOM5=4,
+	PortCOM6=5,
+	PortCOM7=6,
+	PortCOM8=7,
+	PortCOM9=8
+};
+
+enum menu_rate
+{
+	Baud300=0,
+	Baud1200=1,
+	Baud2400=2,
+	Baud4800=3,
+	Baud9600=4,
+	Baud19200=5,
+	Baud38400=6,
+	Baud57600=7,
+	Baud115200=8,
+	Baud230400=9
+};
+
+enum menu_databits
+{
+	DataBits4=0,
+	DataBits5=1,
+	DataBits6=2,
+	DataBits7=3,
+	DataBits8=4
+};
+
+enum menu_stopbits
+{
+	StopBits1=0,
+	StopBits15=1,
+	StopBits2=2
+};
+
+enum menu_parity
+{
+	ParNone=0,
+	ParOdd=1,
+	ParEven=2
+};
+
+enum menu_flowcontrol
+{
+	FlowNone=0,
+	FlowHardware=1,
+	FlowSoftware=2
+};
+
+#if (0)
+#define PSerialCommPrefPanelDisplayName	"Serial"
+
+// --- DEPREF --- 
+// Comment line above is required by deprefs.pl tool, which this header is run 
+// through as part of the DE builds (standalone debugger engine). There are 
+// various restrictions and requirements that tool imposes on this header, so 
+// if you change anything past here, please run this header through deprefs.pl
+// and ensure no errors result.
+
+#define PSerialCommPrefPanelName	"Serial Communications"
+
+#define PSERIALCOMMPREFVERSION		2
+
+typedef struct PSerialCommPref {
+	short version;
+	
+	// serial 1
+	signed char	port;
+	signed char	rate;
+	signed char	databits;
+	signed char	stopbits;
+	signed char	parity;
+	signed char	flowcontrol;
+	BOOLCHAR	logdata;
+//#if (HOSTOS == SOLARIS) || (HOSTOS == LINUX)
+//	unsigned char	pad1[3];
+// 	char			dynamicPort[256];
+//#endif
+
+} PSerialCommPref, **PSerialCommPrefHandle;
+#endif
+
+#endif	// __PSERIALCOMMPREF_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/ServerClient.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,326 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#ifndef __SERVERCLIENT_H__
+#define __SERVERCLIENT_H__
+
+#include "shareddata.h"
+#include "mutex.h"
+
+#define MAX_IPADDRESS_SIZE (20)
+#define MAX_PORT_SIZE	(6)
+typedef struct tagTcpConnectData 
+{
+	char ipAddress[MAX_IPADDRESS_SIZE];
+	char ipPort[MAX_PORT_SIZE];
+} *pTcpConnectData, TcpConnectData;
+
+enum eFlowControl
+{
+	eFlowControlNone,
+	eFlowControlHW,
+	eFlowControlSW,
+};
+enum eStopBits
+{
+	eStopBits1,
+	eStopBits15,
+	eStopBits2,
+};
+enum eParity
+{
+	eParityNone,
+	eParityOdd,
+	eParityEven,
+};
+
+#define MAX_COMPORT_SIZE	(20)
+typedef struct tagRealSerialConnectData
+{
+	eFlowControl flowControl;
+	eStopBits stopBits;
+	eParity parity;
+	DWORD baudRate;
+	DWORD dataBits;
+	char comPort[MAX_COMPORT_SIZE];
+} *pRealSerialConnectData, RealSerialConnectData;
+
+typedef struct tagVirtualSerialConnectData
+{
+	char comPort[MAX_COMPORT_SIZE];
+} *pVirtualSerialConnectData, VirtualSerialConnectData;
+
+#define MAX_USBDEVICE_SIZE	(100)
+typedef struct tagUSBConnectData
+{
+	// TODO
+	char device[MAX_USBDEVICE_SIZE];
+} *pUSBConnectData, USBConnectData;
+
+#define MAX_NUMBER_OPTIONS	(20)
+#define MAX_DECODE_FORMAT	(16)
+#define MAX_CONNECTION_TYPE	(16)
+
+// per connection settings
+typedef struct tagConnectData 
+{
+	DWORD retryInterval;				// retry interval option
+	DWORD retryTimeout;					// retry timeout option
+	DWORD traceBoxChannel;					// added TraceBox information
+	char  decodeFormat[MAX_DECODE_FORMAT];	// decode format (e.g. "ost") option
+	char connectType[MAX_CONNECTION_TYPE];	// connection type (e.g. "tcp") 
+	TcpConnectData tcpSettings;			// TCP/IP settings
+	RealSerialConnectData realSerialSettings;	// real serial
+	VirtualSerialConnectData virtualSerialSettings;	// virtual serial
+	USBConnectData usbSettings;			// real USB
+
+} *pConnectData, ConnectData;
+
+// per client options - done at connect time
+typedef struct tagClientOptions
+{
+	DWORD unWrapFormat;					// message unwrapping option (PN or OST)
+	DWORD ostVersion;					// which OST version to use on sendmessage (unused in native)
+
+} *pClientOptions, ClientOptions;
+
+// per client options - done on opening stream
+enum eMessageDestination
+{
+	eDestinationInputStream = 0,		// input stream
+	eDestinationFile,					// message file
+};
+#define MAX_FILEPATH (2048L)
+typedef struct tagDestinationOptions
+{
+	eMessageDestination destination;	// eMessageDestination
+	DWORD streamSize;					// input stream size
+	BOOL overFlowToFile;				// overflow stream to file option
+	CHAR destinationFile[MAX_FILEPATH];	// stream overflow file or message file
+
+} *pDestinationOptions, DestinationOptions;
+
+enum eServerCommand
+{
+	eCmdNone = 0,						// no command to process
+	eCmdConnect,							// connect (connectSettings clientOptions *clientId)
+	eCmdDisconnect,						// disconnect (clientId)
+	eCmdGetClientStatus,					// getclientstatus (clientId *clientStatus)
+	eCmdGetConnectionStatus,				// getconnstatus
+	eCmdSetMessageIds,						// setmessageIds (clientId number messageIds)
+	eCmdGetNumberVersions,					// getnumberversions (clientId *number)
+	eCmdGetVersion,						// getversion (clientId index *version)
+	eCmdGetNumberConnections,				// getnumberconnections (*number)
+	eCmdGetConnectionType,					// getconnectiontype (index *connectionSettings.connectType)
+	eCmdGetConnection,						// getconnection (index *connectionSettings)
+	eCmdGetNumberClients,					// getnumclients (*number)
+	eCmdOpenStream,							// openstream (clientId destinationoptions)
+	eCmdCloseStream,						// closestream (clientId)
+	eCmdStart,								// start (clientId)
+	eCmdStop,								// stop (clientId)
+	eCmdSendMessage,						// sendmessage (clientId number message)
+	eCmdTestClientConnection,				// testconnection (clientId)
+	eCmdTestConnection,					// testconnection (connectSettings)
+	eCmdExit,								// tell server to exit its main command thread
+	eCmdOpenMessageFile,					// openfile (clientId destinationoptions)
+	eCmdCloseMessageFile,					// closefile (clientId)
+	eCmdClearMessageFile,					// clearfile (clientId)
+
+};
+
+enum eServerResponse
+{
+	eRspNone = 0,						// no response generated
+	eRspOK,								// response with no errors
+	eRspError,							// error response: error
+	eRspExitted,						// server has exitted
+};
+
+enum eClientStatus
+{
+	eStarted,							// message processing started
+	eStopped,							// message processing stopped
+	eUnknownClient,						// client not found
+};
+
+enum eConnectionStatus
+{
+	eConnected,							// connection is OK
+	eDisconnected,						// disconnected
+	eRetryInProgress,					// inside retry interval (connected)
+	eRetryTimedOut,						// retry timedout (disconnected)
+};
+
+// ----------- Command/Response Data -------------------
+#define MAX_VERSION_STRING		(80)
+#define MAX_MESSAGEIDS			(256)
+typedef struct tagServerCommandData
+{
+	eServerCommand command;				// command type
+	eServerResponse response;			// response type
+	eClientStatus clientStatus;			// client status
+	eConnectionStatus connectionStatus;	// connection status
+	long error;							// response error
+	unsigned long osError;				// error from the OS if applicable
+	long clientId;						// clientID for command/response
+	long index;							// eGetVersion command/eGetConnection command
+	long number;						// length or other number value (see commands)
+	char version[MAX_VERSION_STRING];	// eGetVersion response
+	ConnectData connectSettings;		// eConnect command/eGetConnection response
+	ClientOptions clientOptions;		// per client options
+	DestinationOptions destinationOptions;		// input stream or message file options
+	long numClients;					// eGetNumberClients response
+	long numConnections;				// eGetNumberConnections response
+	long encodeOption;					// eSendMessage - what to do with protocol headers
+	BYTE protocolVersion;				// eSendMessage - OST version byte if OST protocol
+	BOOL useMyId;						// eSendMessage
+	BYTE myId;							// eSendMessage
+	BYTE messageIds[MAX_MESSAGEIDS];	// eSetMessageIds command
+
+} *pServerCommandData, ServerCommandData;
+
+#define SERVERCOMMANDDATA_MAP_SIZE	(sizeof(ServerCommandData))
+#define SERVERCOMMANDDATA_MAP_NAME	"TCFServerCommandData"
+
+#define SERVERCOMMANDDATA_MUTEX_NAME	"TCFServerCommandDataMutex"
+//#define SERVERCOMMANDDATA_MUTEX_TIMEOUT	(60000L)
+#define SERVERCOMMANDDATA_MUTEX_TIMEOUT	(1000L)
+
+class CServerCommandData : public CSharedData
+{
+public:
+	BOOL Init() { 	if (IsCreator()) \
+	{\
+		pServerCommandData pData = (pServerCommandData)GetDataPtr();\
+		pData->command = eCmdNone;\
+		pData->response = eRspNone;\
+		pData->clientStatus = eStopped;\
+		pData->connectionStatus = eDisconnected;\
+		pData->clientId = -1;\
+		pData->index = 0;\
+		pData->number = 0;\
+		pData->version[0] = 0;\
+		pData->numClients = 0;\
+		pData->numConnections = 0;\
+		memset(&pData->messageIds, 0, MAX_MESSAGEIDS);\
+	}\
+	return TRUE; }
+};
+// ----------- Command/Response Data -------------------
+
+// ----------- Send Message Data -------------------
+#define MAX_SENDMESSAGE			(64*1024L+12)
+typedef struct tagServerMessageData
+{
+	long length;
+	BYTE message[MAX_SENDMESSAGE];	// eSendMessage command
+} *pServerMessageData, ServerMessageData;
+
+#define SERVERMESSAGEDATA_MAP_SIZE	(sizeof(ServerMessageData))
+#define SERVERMESSAGEDATA_MAP_NAME	"TCFServerMessageData"
+
+class CServerMessageData : public CSharedData
+{
+public:
+	BOOL Init() { if (IsCreator()) \
+	{\
+		pServerMessageData pData = (pServerMessageData)GetDataPtr();\
+		memset(&pData->message, 0, MAX_SENDMESSAGE);\
+		pData->length = 0;\
+	}\
+	return TRUE; }
+};
+// ----------- Send Message Data -------------------
+
+// ----------- Server Process Data -------------------
+typedef struct tagServerProcessData
+{
+	long numRefs;						// reference count (first creates server process/last destroys server process)
+	PROCESS_INFORMATION serverProcess;	// Server process information
+} *pServerProcessData, ServerProcessData;
+
+#define SERVERPROCESSDATA_MAP_SIZE	(sizeof(ServerProcessData))
+#define SERVERPROCESSDATA_MAP_NAME	"TCFServerProcessData"
+
+class CServerProcessData : public CSharedData
+{
+public:
+	BOOL Init() { if (IsCreator()) \
+	{\
+		pServerProcessData pData = (pServerProcessData)GetDataPtr();\
+		pData->numRefs = 0;\
+		memset(&pData->serverProcess, 0, sizeof(pData->serverProcess));\
+		pData->serverProcess.hProcess = NULL;\
+	}\
+	return TRUE; }
+};
+// ----------- Server Process Data -------------------
+
+
+// Main server command/response class
+#define SERVERPIPE_MUTEX_NAME	"TCFServerPipeMutex"
+#define SERVERPIPE_MUTEX_TIMEOUT	(60000L)
+
+// Server command/response events
+#define SERVER_COMMAND_READY_EVENTNAME	"TCFServerCommandReadyEvent"
+#define SERVER_RESPONSE_READY_EVENTNAME	"TCFServerResponseReadyEvent"
+#define SERVER_CMDRSP_EVENT_TIMEOUT	60000L
+
+class CServerCommand
+{
+public:
+	CServerCommand();
+	~CServerCommand();
+
+	// Client methods
+	BOOL SendCommand(pServerCommandData pCmd, DWORD msgLength=0, BYTE* message=NULL);
+	BOOL GetResponse(pServerCommandData pRsp);
+
+	// Server methods
+	BOOL GetCommand(pServerCommandData pCmd, pServerMessageData pMsg);
+	BOOL SendResponse(pServerCommandData pRsp);
+
+	BOOL WaitforServerPipeAccess() { return m_ServerPipeMutex.Wait(); }
+	BOOL ReleaseServerPipeAccess() { return m_ServerPipeMutex.Release(); }
+
+	pServerProcessData GetProcessPtr() { return (pServerProcessData)m_ServerProcessData.GetDataPtr(); }
+
+private:
+	pServerCommandData GetDataPtr() { return (pServerCommandData)m_ServerCommandData.GetDataPtr(); }
+	pServerMessageData GetMsgPtr() { return (pServerMessageData)m_ServerMessageData.GetDataPtr(); }
+
+private:
+	// Server Commands/Responses
+	BOOL WaitForServerCommandAccess() { return m_ServerCommandMutex.Wait(); };
+	BOOL ReleaseServerCommandAccess() { return m_ServerCommandMutex.Release(); };
+//	BOOL WaitForServerCommandAccess() { return TRUE; };
+//	BOOL ReleaseServerCommandAccess() { return TRUE; };
+	CServerCommandData m_ServerCommandData;
+	CServerMessageData m_ServerMessageData;
+	CServerProcessData m_ServerProcessData;
+
+	Mutex m_ServerCommandMutex;
+	Mutex m_ServerPipeMutex;
+
+	// client
+	void SetCommandReady();
+	// server
+	void SetResponseReady();
+	HANDLE m_hServerCommandReadyEvent;
+	HANDLE m_hServerResponseReadyEvent;
+};
+
+#endif// __SERVERCLIENT_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/TCConstants.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#ifndef __TCCONSTANTS_H__
+#define __TCCONSTANTS_H__
+
+#include <stdio.h>
+
+// com.nokia.tcf.api.ITCConnection.java
+#define DEFAULT_COMM_ERROR_RETRY_INTERVAL 1i64
+#define DEFAULT_COMM_ERROR_RETRY_TIMEOUT 300i64
+
+// com.nokia.tcf.api.ITCMessageOptions.java
+
+#define DESTINATION_INPUTSTREAM 0i64
+#define DESTINATION_CLIENTFILE 1i64
+#define DEFAULT_DESTINATION 0i64
+#define DEFAULT_INPUTSTREAM_OVERFLOW 1i64
+#define UNWRAP_LEAVE_HEADERS 0i64
+#define UNWRAP_DELETE_HEADERS 1i64
+#define DEFAULT_UNWRAP_OPTION 0i64
+#define ENCODE_NO_FORMAT 0i64
+#define ENCODE_FORMAT 1i64
+#define ENCODE_TRK_FORMAT 2i64
+#define DEFAULT_ENCODE_FORMAT 0i64
+#define DEFAULT_OST_VERSION 1L
+
+#endif //__TCCONSTANTS_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/TCDebugLog.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#ifndef __TCDEBUGLOG_H__
+#define __TCDEBUGLOG_H__
+#include <stdio.h>
+#include <share.h>
+#include "mutex.h"
+
+
+#define LOG_BASENAME	"c:\\TCDebugLog"
+#define LOG_MUTEX_BASENAME	"TCDebugLogMutex"
+#define LOG_MUTEX_TIMEOUT	(60000L)
+
+class TCDebugLog
+{
+public:
+	TCDebugLog();
+	TCDebugLog(char* baseName, DWORD id);
+	TCDebugLog(char* baseName, DWORD id, DWORD timeout);
+	~TCDebugLog();
+
+	void log(char* msg);
+
+//private:
+//	BOOL WaitForAccess() { return m_Mutex.Wait(); };
+//	BOOL ReleaseAccess() { return m_Mutex.Release(); };
+	BOOL WaitForAccess();
+	BOOL ReleaseAccess();
+
+	void logTime();
+	Mutex m_Mutex;
+	FILE* m_fLog;
+	char m_FileName[80];
+
+};
+#endif //__TCDEBUGLOG_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/TCErrorConstants.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#ifndef __TCERRORCONSTANTS_H__
+#define __TCERRORCONSTANTS_H__
+
+#include <stdio.h>
+
+// these must match com.nokia.tcf.api.TCErrorContants.java
+
+	#define TCAPI_ERR_NONE								0	// no error
+	#define TCAPI_ERR_CANNOT_OPEN						1	// cannot open port
+	#define TCAPI_ERR_ALREADY_OPEN						2	// port already open
+	#define TCAPI_ERR_INVALID_HANDLE					3	// invalid handle
+	#define TCAPI_ERR_TIMEOUT							4	// timeout on port
+	#define TCAPI_ERR_FILE_IS_OPEN						5	// a file is already open
+	#define TCAPI_ERR_FILE_DOES_NOT_EXIST				6	// file does not exist
+	#define TCAPI_ERR_NO_FILE							7	// no file is open
+	#define TCAPI_ERR_ROUTING_STOPPED					8	// routing is stopped
+	#define TCAPI_ERR_ROUTING_IN_PROGRESS				9	// routing in progress
+	#define TCAPI_ERR_WRITING_FILE						10	// could not write to file
+	#define TCAPI_ERR_NO_MESSAGESIDS_REGISTERED			11	// no message Ids are registered
+	#define TCAPI_ERR_MEDIA_NOT_OPEN					12	// handle indicates openMedia not called
+	#define TCAPI_ERR_MEDIA_NOT_SUPPORTED				13	// media type is not supported yet
+	#define TCAPI_ERR_UNKNOWN_MEDIA_TYPE				14	// media not known
+	#define TCAPI_ERR_MISSING_MEDIA_DATA				15	// media type known, but missing data
+	#define TCAPI_ERR_INVALID_MEDIA_DATA				16	// media type known, but has invalid prefs
+	#define TCAPI_ERR_WHILE_CONFIGURING_MEDIA			17	// media type known, but couldn't be configured
+	#define TCAPI_ERR_CANNOT_FIND_ROUTER				18	// cannot find TCFServer.exe
+	#define TCAPI_ERR_CANNOT_CREATE_ROUTER_PROCESS		19	// found " but error returned on CreateProcess
+	#define TCAPI_ERR_MEDIA_IS_BUSY						20	// used for Trace bpx when someone else is connected
+	#define TCAPI_ERR_PROTOCOL_NOT_SUPPORTED_BY_MEDIA	21	// TraceBox does not support protocol
+	#define TCAPI_ERR_FEATURE_NOT_IMPLEMENTED			22	// API feature not implemented yet
+	#define TCAPI_ERR_COMM_ERROR						23	// error while polling/reading COMM port
+	#define TCAPI_ERR_COMM_TIMEOUT						24	// comm error retry timeout
+	#define TCAPI_ERR_COMM_MULTIPLE_OPEN				25	// there are multiple connections open - cannot attach
+	#define TCAPI_ERR_NO_COMM_OPEN						26	// there are no connections open - cannot attach
+	#define TCAPI_ERR_ALREADY_CONNECTED					27	// this client is already connected to some target
+	#define TCAPI_ERR_INVALID_DECODE_FORMAT				28	// invalid decode format (PN or OST is required)
+	#define TCAPI_ERR_INVALID_RETRY_PERIODS				29	// invalid retry timeout or interval
+	#define TCAPI_ERR_INVALID_STREAM_OVERFLOW_OPTION	30	// invalid option for overflowing input stream
+	#define TCAPI_ERR_INVALID_ENCODE_FORMAT				31	// invalid trace encoding format option
+	#define TCAPI_ERR_INVALID_MESSAGE_UNWRAP_OPTION		32	// invalid trace message unwrapping option
+	#define TCAPI_ERR_INVALID_STREAM_BUFFER_SIZE		33	// input stream buffer size is restricted (> 0 currently)
+	#define TCAPI_ERR_MISSING_MESSAGE_OPTIONS			34	// messages options (ITCMessageOptions) not specified
+	#define TCAPI_ERR_MISSING_CONNECTION_SPEC			35	// missing ITCConnection specification
+	#define TCAPI_ERR_MISSING_MESSAGE					36 	// ITCMessage is missing on send Message
+	#define TCAPI_ERR_MESSAGE_OPTIONS_CONFLICT			37	// ITCMessage message options conflict with client's options
+	#define TCAPI_ERR_MESSAGEID_MAXIMUM					38	// ITCMessageIds number > 256 (probably duplicates)
+	#define TCAPI_ERR_INPUTSTREAM_FILECREATE			39	// cannot create overflow file
+	#define TCAPI_ERR_INPUTSTREAM_CLOSED				40	// operation not allowed - input stream is closed
+	#define TCAPI_ERR_PLATFORM_CONFIG					41	// Platform configuration not found
+	#define TCAPI_ERR_ERRLISTENER_NULL					42	// error listener cannot be null (add)
+	#define TCAPI_ERR_COMM_RETRY_IN_PROGRESS			43	// comm retry in progress
+	#define TCAPI_INFO_COMM_RECONNECTED					44	// reconnected during retry
+	#define TCAPI_ERR_COMM_INVALID_BAUDRATE				45	// Real Serial parameter checking
+	#define TCAPI_ERR_COMM_INVALID_DATABITS				46	// Real Serial parameter checking
+	#define TCAPI_ERR_COMM_INVALID_PARITY				47	// Real Serial parameter checking
+	#define TCAPI_ERR_COMM_INVALID_STOPBITS				48	// Real Serial parameter checking
+	#define TCAPI_ERR_COMM_INVALID_FLOWCONTROL			49	// Real Serial parameter checking
+	#define TCAPI_ERR_COMM_SERVER_RESPONSE_TIMEOUT		50	// TCFServer response timed out
+	#define TCAPI_ERR_INPUTSTREAM_BUFFER_OVERFLOW_MISSED_MSGS	51	// buffer overflowed (no overflow file) - msgs missed
+	#define TCAPI_INFO_INPUTSTREAM_BUFFER_OVERFLOW_TO_FILE	52	// buffer overflowed (overflow file in use)
+	#define TCAPI_ERR_INPUTSTREAM_FILE_OVERFLOW_MISSED_MSGS	53	// file overflowed - msgs missed
+	#define TCAPI_ERR_FILE_SPEC_MISSING					54	// Message file not specified
+	#define TCAPI_ERR_CREATE_FILE						55	// Message file could not be created
+	#define TCAPI_INFO_TRACEBOX_MEMORY_WARNING			56	// TRACEBOX buffer is close to overflowing
+	#define TCAPI_ERR_TRACEBOX_MEMORY_IS_CLOSED			57	// TRACEBOX buffer overflowed and is now closed
+	#define TCAPI_INFO_TRACEBOX_MEMORY_IS_NORMAL		58	// TRACEBOX buffer overflowed and is now closed
+	#define TCAPI_ERR_TRACEBOX_DATA_CORRUPTED			59	// TRACEBOX received corrupted trace data from phone
+	#define TCAPI_ERR_TRACEBOX_PROTOCOL_MEMORY_OVERFLOW	60	// TRACEBOX protocol processing buffer overflowed - fatal
+
+#endif //__TCERRORCONSTANTS_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/mutex.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#ifndef __MUTEX_H__
+#define __MUTEX_H__
+
+class Mutex
+{
+public:
+	Mutex();
+	~Mutex();
+
+	BOOL Open(CHAR* mutexName, DWORD waitTimeout);
+	void Close();
+	BOOL Wait();
+	BOOL Release();
+
+private:
+#ifdef WIN32
+	HANDLE m_hMutex;
+#else
+#error non WIN32
+#endif
+
+	DWORD m_waitTimeout;
+	BOOL m_mutexOpen;
+};
+#endif __MUTEX_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Headers/shareddata.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#ifndef __SHAREDDATA_H__
+#define __SHAREDDATA_H__
+
+class CSharedData
+{
+public:
+	CSharedData();
+	~CSharedData();
+
+	BOOL Open(DWORD dwSize, CHAR *sharedName);
+	BOOL Open(HANDLE hFile, DWORD dwSize, CHAR *sharedName);
+	Close();
+	virtual BOOL Init();
+	LPVOID GetDataPtr();
+	BOOL IsCreator();
+
+private:
+	HANDLE m_hSharedData;
+	LPVOID m_lpDataPtr;		// pointer to mapped data
+	BOOL m_fCreator;		// am i the creator?
+};
+
+#endif // __SHAREDDATA_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Source/ErrorMonitorData.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,300 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "stdafx.h"
+#include "ErrorMonitorData.h"
+#include "TCErrorConstants.h"
+#include <stdio.h>
+#include <sys/stat.h>
+
+#ifdef TCF_CLIENT
+#include "..\..\TCFClient\ClientManager.h"
+extern CClientManager* gManager;
+#endif
+
+#ifdef TCF_SERVER
+#include "..\..\TCFServer\ServerManager.h"
+extern CServerManager* gManager;
+#endif
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+//#define LOG_PERFORMANCE
+#ifdef LOG_PERFORMANCE
+# ifdef TCF_CLIENT
+static char* perfFileName="c:\\tcf\\clienterrorperf.txt";
+# else
+static char* perfFileName="c:\\tcf\\servererrorperf.txt";
+# endif
+static FILE *fpLog = NULL;
+static int numLogged=0;
+static void logPerf(char* msg);
+static void openPerf();
+static void closePerf();
+#define OPENPERF() openPerf()
+#define LOGPERF(s) logPerf(s)
+#define CLOSEPERF() closePerf()
+#else
+#define OPENPERF()
+#define LOGPERF(s)
+#define CLOSEPERF()
+#endif
+
+//#define LOG_ERRORMONITOR
+#if defined(LOG_ERRORMONITOR) && defined(_DEBUG)
+extern char TCDebugMsg[];
+#define TCDEBUGOPEN() if (gDoLogging) gManager->m_DebugLog->WaitForAccess();
+#define TCDEBUGLOGS(s) if (gDoLogging) sprintf(TCDebugMsg,"%s", s); if (gDoLogging) gManager->m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) sprintf(TCDebugMsg, s, a1); if (gDoLogging) gManager->m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) sprintf(TCDebugMsg, s, a1, a2); if (gDoLogging) gManager->m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) sprintf(TCDebugMsg, s, a1, a2, a3); if (gDoLogging) gManager->m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGCLOSE() if (gDoLogging) gManager->m_DebugLog->ReleaseAccess();
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+CErrorMonitor::CErrorMonitor()
+{
+}
+CErrorMonitor::CErrorMonitor(long inClientID)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA2("CErrorMonitor::CErrorMonitor clientId = %d this = %x\n", inClientID, this);
+
+	m_ClientID = inClientID;
+
+	TCDEBUGLOGS("CErrorMonitor::CErrorMonitor done\n");
+	TCDEBUGCLOSE();
+
+	OPENPERF();
+}
+CErrorMonitor::~CErrorMonitor()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA2("CErrorMonitor::~CErrorMonitor clientId = %d this = %x\n", m_ClientID, this);
+
+	m_Data.Close();
+	m_Mutex.Close();
+
+	TCDEBUGLOGS("CErrorMonitor::~CErrorMonitor done\n");
+	TCDEBUGCLOSE();
+
+	CLOSEPERF();
+}
+
+BOOL CErrorMonitor::CreateData()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA2("CErrorMonitor::CreateData clientId = %d this = %x\n", m_ClientID, this);
+
+	// create shared data location
+	char toString[30];
+	sprintf(toString, "%s%04.4ld",ERRORMONITORDATA_MAP_BASENAME, m_ClientID);
+	m_Data.Open(ERRORMONITORDATA_MAP_SIZE, toString);
+	m_Data.Init();
+
+	sprintf(toString, "%s%04.4ld",ERRORMONITORDATA_MUTEX_BASENAME, m_ClientID);
+
+	m_Mutex.Open(toString, ERRORMONITORDATA_MUTEX_TIMEOUT);
+
+	TCDEBUGLOGS("CErrorMonitor::CreateData done\n");
+	TCDEBUGCLOSE();
+
+	return TRUE;
+}
+
+BOOL CErrorMonitor::GetError(LONG* tcfError, BOOL* osErrorUsed, DWORD* osError)
+{
+	TCDEBUGOPEN();
+//	TCDEBUGLOGA2("CErrorMonitor::GetError clientId = %d this = %x\n", m_ClientID, this);
+	BOOL found = FALSE;
+
+	WaitForAccess();
+
+	pErrorData pData = GetDataPtr();
+
+#if (0)
+	if (pData->errorOccurred)
+	{
+		TCDEBUGLOGA3("CErrorMonitor::GetError tcfError = %d osErrorUsed = %d osError = %d\n", 
+			pData->tcfError, pData->osErrorUsed, pData->osError);
+
+		found = TRUE;
+		*tcfError = pData->tcfError;
+		*osErrorUsed = pData->osErrorUsed;
+		*osError = pData->osError;
+
+		pData->errorOccurred = FALSE;
+	}
+#endif
+#ifdef LOG_PERFORMANCE
+	char msg[100];
+	sprintf(msg, "GetError numErrors=%d\n", pData->numberErrors);
+	LOGPERF(msg);
+#endif
+	if (!IsErrorQueueEmpty(pData))
+	{
+		LOGPERF("GetError\n");
+		found = TRUE;
+		*tcfError = pData->errors[pData->first].tcfError;
+		*osErrorUsed = pData->errors[pData->first].osErrorUsed;
+		*osError = pData->errors[pData->first].osError;
+		TCDEBUGLOGA3("CErrorMonitor::GetError tcfError = %d osErrorUsed = %d osError = %d\n", 
+			*tcfError, *osErrorUsed, *osError);
+		pData->numberErrors--;
+		if (pData->numberErrors <= 0)
+		{
+			ResetErrorQueue(pData);
+		}
+		else
+		{
+			pData->first++;
+			if (pData->first >= MAX_ERRORS)
+				pData->first = 0;
+		}
+	}
+#ifdef LOG_PERFORMANCE
+//	char msg[100];
+	sprintf(msg, "GetError numErrors=%d tcfError=%d\n", pData->numberErrors, *tcfError);
+	LOGPERF(msg);
+#endif
+	ReleaseAccess();
+
+//	TCDEBUGLOGS("CErrorMonitor::GetError done\n");
+	TCDEBUGCLOSE();
+	return found;
+}
+
+BOOL CErrorMonitor::PutError(LONG tcfError, BOOL osErrorUsed, DWORD osError)
+{
+	TCDEBUGOPEN();
+//	TCDEBUGLOGA2("CErrorMonitor::PutError clientId = %d this = %x\n", m_ClientID, this);
+
+	BOOL done = FALSE;
+
+	WaitForAccess();
+
+	pErrorData pData = GetDataPtr();
+	if (pData == NULL)
+		return done;
+#if (0)
+	if (!pData->errorOccurred)
+	{
+		done = TRUE;
+		pData->tcfError = tcfError;
+		pData->osErrorUsed = osErrorUsed;
+		pData->osError = osError;
+
+//		TCDEBUGLOGA3("CErrorMonitor::PutError tcfError = %d osErrorUsed = %d osError = %d\n", 
+//			pData->tcfError, pData->osErrorUsed, pData->osError);
+
+		pData->errorOccurred = TRUE;
+	}
+#endif
+#ifdef LOG_PERFORMANCE
+	char msg[100];
+	sprintf(msg, "PutError numErrors=%d tcfError=%d\n", pData->numberErrors, tcfError);
+	LOGPERF(msg);
+#endif
+	if (!IsErrorQueueFull(pData))
+	{
+		LOGPERF("PutError\n");
+		TCDEBUGLOGA3("CErrorMonitor::PutError tcfError = %d osErrorUsed = %d osError = %d\n", 
+			tcfError, osErrorUsed, osError);
+		done = TRUE;
+		pData->errors[pData->next].tcfError = tcfError;
+		pData->errors[pData->next].osErrorUsed = osErrorUsed;
+		pData->errors[pData->next].osError = osError;
+		pData->numberErrors++;
+		pData->next++;
+		if (pData->next >= MAX_ERRORS)
+			pData->next = 0;
+	}
+#ifdef LOG_PERFORMANCE
+//	char msg[100];
+	sprintf(msg, "PutError numErrors=%d\n", pData->numberErrors);
+	LOGPERF(msg);
+#endif
+	ReleaseAccess();
+
+//	TCDEBUGLOGS("CErrorMonitor::GetError done\n");
+	TCDEBUGCLOSE();
+	return done;
+}
+
+BOOL CErrorMonitorData::Init()
+{
+	if (IsCreator())
+	{
+		pErrorData pData = (pErrorData)GetDataPtr();
+//		pData->errorOccurred = FALSE;
+//		pData->osErrorUsed = FALSE;
+//		pData->osError = 0;
+//		pData->tcfError = TCAPI_ERR_NONE;
+		pData->first = pData->next = pData->numberErrors = 0;
+	}
+	return TRUE;
+}
+#ifdef LOG_PERFORMANCE
+static void logPerf(char* msg)
+{
+	if (fpLog)
+	{
+		SYSTEMTIME sTime;
+		GetLocalTime(&sTime);
+		fprintf(fpLog, 
+			"%02.2d%02.2d-%02.2d:%02.2d:%02.2d.%03.3d: %s",
+			sTime.wDay, sTime.wMonth, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds,
+			msg);
+
+		numLogged++;
+		if ((numLogged % 1000) == 0)
+			fflush(fpLog);
+	}
+}
+static void openPerf()
+{
+	struct _stat buf;
+	char* dirname = "c:\\tcf";
+	int result = _stat(dirname, &buf);
+	if (result == 0) // exists
+	{
+		if (fpLog == NULL)
+			fpLog = _fsopen(perfFileName, "at", _SH_DENYNO);
+	}
+	else
+	{
+		fpLog = NULL;
+	}
+}
+static void closePerf()
+{
+	if (fpLog)
+	{
+		fflush(fpLog);
+		fclose(fpLog);
+	}
+	fpLog = NULL;
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Source/InputStream.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,1044 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "stdafx.h"
+#include "InputStream.h"
+#include <stdio.h>
+#include <sys/stat.h>
+
+#ifdef TCF_CLIENT
+#include "..\..\TCFClient\ClientManager.h"
+extern CClientManager* gManager;
+#endif
+#ifdef TCF_SERVER
+#include "..\..\TCFServer\ServerManager.h"
+extern CServerManager* gManager;
+//#define LOG_PERFORMANCE
+#endif
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+// for performance - independent of debug logging
+//#define LOG_PERFORMANCE
+#ifdef LOG_PERFORMANCE
+# ifdef TCF_CLIENT
+static char* perfFileName="c:\\tcf\\clientperf.txt";
+# else
+static char* perfFileName="c:\\tcf\\serverperf.txt";
+# endif
+static FILE *fpLog = NULL;
+static int numLogged=0;
+static void logPerf(char* msg);
+static void openPerf();
+static void closePerf();
+#define OPENPERF() openPerf()
+#define LOGPERF(s) logPerf(s)
+#define CLOSEPERF() closePerf()
+#else
+#define OPENPERF()
+#define LOGPERF(s)
+#define CLOSEPERF()
+#endif
+
+//#define LOG_INPUTSTREAM
+#if defined(LOG_INPUTSTREAM) && defined(_DEBUG)
+extern char TCDebugMsg[];
+#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { gManager->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+CInputStream::CInputStream()
+{
+}
+
+CInputStream::CInputStream(CHAR* pOverflowPath, DWORD inBufferSize, BOOL inOverFlowToFile, long inClientID)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA2("CInputStream::CInputStream clientId = %d this = %x\n", inClientID, this);
+
+	m_ClientID = inClientID;
+	m_BufferSize = inBufferSize;
+	m_FileSize = INPUTSTREAMOVERFLOW_FILE_SIZE;
+//	m_FileSize = 2*1024L;				for testing only
+
+	if (pOverflowPath == NULL)
+	{
+		m_OverFlowBaseName[0] = NULL;
+		m_OverFlowToFile = FALSE;
+	}
+	else
+	{
+		strncpy(m_OverFlowBaseName, pOverflowPath, MAX_FILEPATH);
+		m_OverFlowToFile = inOverFlowToFile;
+	}
+
+	m_File = NULL;
+
+	m_StreamLocked = FALSE;
+
+	TCDEBUGLOGS("CInputStream::CInputStream done\n");
+	TCDEBUGCLOSE();
+}
+
+CInputStream::~CInputStream()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA2("CInputStream::~CInputStream clientId = %d this = %x\n", m_ClientID, this);
+
+	m_Mutex.Close();
+	m_Data.Close();
+	m_Info.Close();
+
+	if (m_File != NULL)
+	{
+		m_File->Close();
+		delete m_File;
+	}
+
+	TCDEBUGLOGS("CInputStream::~CInputStream done\n");
+	TCDEBUGCLOSE();
+
+	CLOSEPERF();
+}
+
+BOOL CInputStream::CreateStream()
+{
+	BOOL ok = TRUE;
+#if (0)
+#ifdef _DEBUGLOG
+	#ifdef TCF_CLIENT
+		m_DebugLog = new TCDebugLog("TCF_ClientStreamLog", m_ClientID);
+	#else
+		m_DebugLog = new TCDebugLog("TCF_ServerStreamLog", m_ClientID);
+	#endif
+#else
+	m_DebugLog = NULL;
+#endif
+#endif
+	TCDEBUGOPEN();
+	TCDEBUGLOGA2("CInputStream::CreateStream clientId = %d this = %x\n", m_ClientID, this);
+
+	char toString[30];
+	sprintf(toString, "%s%04.4d", INPUTSTREAMDATA_MAP_BASENAME, m_ClientID);
+
+	TCDEBUGLOGA1("CInputStream::CreateStream dataname = %s\n", toString);
+
+	m_Data.Open(m_BufferSize, toString);
+	m_Data.Init();
+
+	sprintf(toString, "%s%04.4d", INPUTSTREAMDATA_MUTEX_BASENAME, m_ClientID);
+	TCDEBUGLOGA1("CInputStream::CreateStream mutexname = %s\n", toString);
+
+	m_Mutex.Open(toString, INPUTSTREAMDATA_MUTEX_TIMEOUT);
+
+	sprintf(toString, "%s%04.4d", INPUTSTREAMINFO_MAP_BASENAME, m_ClientID);
+	TCDEBUGLOGA1("CInputStream::CreateStream infoname = %s\n", toString);
+
+	m_Info.Open(INPUTSTREAMINFO_MAP_SIZE, toString);
+	m_Info.Init();
+#ifdef USE_CIRCULAR_BUFFER
+	GetInfoPtr()->bufferCapacity = m_BufferSize;
+#endif
+
+	// overflow file?
+	if (m_OverFlowToFile)
+	{
+		m_File = new CInputStreamFile();
+		m_File->SetClientId(m_ClientID);
+		if (!m_File->Open(m_FileSize, m_OverFlowBaseName))
+		{
+			delete m_File;
+			m_File = NULL;
+			ok = FALSE;
+		}
+	}
+	TCDEBUGLOGS("CInputStream::CreateStream done\n");
+	TCDEBUGCLOSE();
+
+	OPENPERF();
+
+	return ok;
+}
+#ifdef USE_CIRCULAR_BUFFER
+void CInputStream::DoReadBuffer(pInputStreamInfo pInfo, BYTE* pBuffer, BYTE* outData, DWORD inLength)
+{
+	DWORD lenToEnd = pInfo->bufferCapacity - pInfo->bufferRead;
+	if (lenToEnd > inLength)
+		lenToEnd = inLength;
+
+	if (lenToEnd > 0)
+		memcpy(outData, &pBuffer[pInfo->bufferRead], lenToEnd);
+
+	DWORD lenRemaining = inLength - lenToEnd;
+	if (lenRemaining > 0)
+		memcpy(&outData[lenToEnd], &pBuffer[0], lenRemaining);
+
+	pInfo->bufferSize -= inLength;
+
+	IncrementReadPosition(pInfo, inLength);
+}
+void CInputStream::DoWriteBuffer(pInputStreamInfo pInfo, BYTE* pBuffer, BYTE* inData, DWORD inLength)
+{
+	DWORD lenToEnd = pInfo->bufferCapacity - pInfo->bufferWrite;
+	if (lenToEnd > inLength)
+		lenToEnd = inLength;
+	memcpy(&pBuffer[pInfo->bufferWrite], inData, lenToEnd);
+	DWORD lenRemaining = inLength - lenToEnd;
+	if (lenRemaining > 0)
+		memcpy(&pBuffer[0], (const void*)&inData[lenToEnd], lenRemaining);
+
+	pInfo->bufferSize += inLength;
+
+	IncrementWritePosition(pInfo, inLength);
+}
+void CInputStream::IncrementReadPosition(pInputStreamInfo pInfo, DWORD inLength)
+{
+	DWORD lenToEnd = pInfo->bufferCapacity - pInfo->bufferRead;
+	if (inLength <= lenToEnd)
+		pInfo->bufferRead += inLength;
+	else
+		pInfo->bufferRead = inLength - lenToEnd;
+}
+void CInputStream::IncrementWritePosition(pInputStreamInfo pInfo, DWORD inLength)
+{
+	DWORD lenToEnd = pInfo->bufferCapacity - pInfo->bufferWrite;
+	if (inLength <= lenToEnd)
+		pInfo->bufferWrite += inLength;
+	else
+		pInfo->bufferWrite = inLength - lenToEnd;
+}
+void CInputStream::DoPeekBuffer(pInputStreamInfo pInfo, BYTE* pBuffer, BYTE* outData, DWORD inLength)
+{
+	DWORD lenToEnd = pInfo->bufferCapacity - pInfo->bufferPeek;
+	if (lenToEnd > inLength)
+		lenToEnd = inLength;
+
+	if (lenToEnd > 0)
+		memcpy(outData, &pBuffer[pInfo->bufferPeek], lenToEnd);
+
+	DWORD lenRemaining = inLength - lenToEnd;
+	if (lenRemaining > 0)
+		memcpy(&outData[lenToEnd], &pBuffer[0], lenRemaining);
+}
+void CInputStream::IncrementPeekPosition(pInputStreamInfo pInfo, DWORD inLength)
+{
+	DWORD lenToEnd = pInfo->bufferCapacity - pInfo->bufferPeek;
+	if (inLength <= lenToEnd)
+		pInfo->bufferPeek += inLength;
+	else
+		pInfo->bufferPeek = inLength - lenToEnd;
+}
+long CInputStream::AddMessage(DWORD inLength, BYTE* inMessage)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA3("CInputStream::AddMessage clientId = %d inLength = %d this = %x\n", m_ClientID, inLength, this);
+
+	long err = TCAPI_ERR_NONE;
+
+	BOOL done = FALSE;
+	if (inLength == 0 || inMessage == NULL)
+		return TCAPI_ERR_NONE;
+
+	BOOL gotIt = WaitForAccess(); // will lock on first access only
+
+	pInputStreamInfo pInfo = GetInfoPtr();
+	pInputStreamData pData = GetDataPtr();
+	pInputStreamFile pFile = GetFilePtr();
+
+	long nfile = pInfo->numberBytesInFile;						// number bytes in file
+	long nbuffer = pInfo->numberBytes - pInfo->numberBytesInFile;	// number bytes in buffer
+
+	TCDEBUGLOGA2("CInputStream::AddMessage numberMessages      =%d numberBytes      =%d\n",pInfo->numberMessages, pInfo->numberBytes);
+
+	DWORD nWriteSize = pInfo->bufferCapacity - pInfo->bufferSize;
+	if (nWriteSize > (inLength+sizeof(DWORD)))
+	{
+		DoWriteBuffer(pInfo, pData, (BYTE*)&inLength, sizeof(DWORD));
+		DoWriteBuffer(pInfo, pData, inMessage, inLength);
+		pInfo->numberBytes += inLength + sizeof(DWORD);
+		pInfo->numberMessages++;
+		done = TRUE;
+	}
+	else
+	{
+		// not enough room
+		// we just lost a message
+		TCDEBUGLOGS("CInputStream::AddMessage buffer overflowed and no file - msg lost\n");
+		LOGPERF("AddMessage buffer overflowed\n");
+		err = TCAPI_ERR_INPUTSTREAM_BUFFER_OVERFLOW_MISSED_MSGS;
+	}
+
+	TCDEBUGLOGA2("CInputStream::AddMessage numberMessages      =%d numberBytes      =%d\n",pInfo->numberMessages, pInfo->numberBytes);
+
+#ifdef LOG_PERFORMANCE
+	char msg[200];
+	sprintf(msg, "AddMessage numMsgs = %d numByts = %d\n", pInfo->numberMessages, pInfo->numberBytes);
+	LOGPERF(msg);
+#endif
+//	ReleaseAccess(); // server will unlock all streams once the buffer is processed if any added
+
+	TCDEBUGLOGA1("CInputStream::AddMessage err=%d\n", err);
+	TCDEBUGCLOSE();
+
+	return err;
+}
+// now only used still by the C++ api
+DWORD CInputStream::GetNextMessage(DWORD inLength, BYTE* outMessage)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA3("CInputStream::GetNextMessage clientId = %d inLength = %d this = %x\n", m_ClientID, inLength, this);
+
+	DWORD outMsgLen = 0;
+
+	BOOL gotIt = WaitForAccess();
+	if (gotIt)
+	{
+		DWORD dwMsgSize = 0;
+
+		pInputStreamInfo pInfo = GetInfoPtr();
+		pInputStreamData pData = GetDataPtr();
+		pInputStreamFile pFile = GetFilePtr();
+
+		TCDEBUGLOGA2("CInputStream::GetNextMessage numberMessages      =%d numberBytes      =%d\n",pInfo->numberMessages, pInfo->numberBytes);
+
+		if (pInfo->numberBytes > 0)
+		{
+			DoReadBuffer(pInfo, pData, (BYTE*)&dwMsgSize, sizeof(DWORD));
+			if (inLength > dwMsgSize)
+				inLength = dwMsgSize;
+
+			DoReadBuffer(pInfo, pData, outMessage, inLength);
+			outMsgLen = inLength;
+			pInfo->numberMessages--;
+			pInfo->numberBytes = pInfo->numberBytes - dwMsgSize - sizeof(DWORD);
+		}
+
+		TCDEBUGLOGA2("CInputStream::GetNextMessage numberMessages      =%d numberBytes      =%d\n",pInfo->numberMessages, pInfo->numberBytes);
+
+		ReleaseAccess();
+	}
+
+#ifdef LOG_PERFORMANCE
+//	char msg[200];
+//	sprintf(msg, "GetNextMessage.outMsgLen = %d\n", outMsgLen);
+//	LOGPERF(msg);
+	LOGPERF("GetNextMessage\n");
+#endif
+
+	TCDEBUGLOGS("CInputStream::GetNextMessage done\n");
+	TCDEBUGCLOSE();
+
+	return outMsgLen;
+}
+
+DWORD CInputStream::GetNextMessageSize()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA2("CInputStream::GetNextMessageSize clientId = %d this = %x\n", m_ClientID, this);
+
+	DWORD length = 0;
+
+	BOOL gotIt = WaitForAccess();
+	if (gotIt)
+	{
+
+		pInputStreamInfo pInfo = GetInfoPtr();
+		pInputStreamData pData = GetDataPtr();
+
+		if (pInfo->numberMessages > 0)
+		{
+			pInfo->bufferPeek = pInfo->bufferRead;
+			DoPeekBuffer(pInfo, pData, (BYTE*)&length, sizeof(DWORD));
+		}
+
+		ReleaseAccess();
+	}
+
+	TCDEBUGLOGA1("CInputStream::GetNextMessageSize length = %d\n", length);
+	TCDEBUGCLOSE();
+
+#ifdef LOG_PERFORMANCE
+//	char msg[200];
+//	sprintf(msg, "GetNextMessageSize.length = %d\n", length);
+//	LOGPERF(msg);
+	LOGPERF("GetNextMessageSize\n");
+#endif
+	return length;
+}
+void CInputStream::GetMessageSizes(long inNumberMessages, DWORD* outMessageSizes)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA3("CInputStream::GetMessageSizes clientId = %d this = %x inNum = %d\n", m_ClientID, this, inNumberMessages);
+
+	BOOL gotIt = WaitForAccess();
+	if (gotIt)
+	{
+
+		pInputStreamData pData = GetDataPtr();
+		pInputStreamFile pFile = GetFilePtr();
+		pInputStreamInfo pInfo = GetInfoPtr();
+
+		DWORD numberToGet = inNumberMessages;
+		if (numberToGet > pInfo->numberMessages) numberToGet = pInfo->numberMessages;
+
+		if (numberToGet > 0)
+		{
+			pInfo->bufferPeek = pInfo->bufferRead;
+			for (DWORD i = 0; i < numberToGet; i++)
+			{
+				DWORD len = 0;
+				DoPeekBuffer(pInfo, pData, (BYTE*)&len, sizeof(DWORD));
+				outMessageSizes[i] = len;
+				IncrementPeekPosition(pInfo, len+sizeof(DWORD));
+			}
+		}
+
+		ReleaseAccess();
+	}
+
+	TCDEBUGLOGS("CInputStream::GetMessageSizes done\n");
+	TCDEBUGCLOSE();
+	LOGPERF("GetMessageSizes\n");
+}
+
+#ifdef TCF_CLIENT
+DWORD CInputStream::GetMessages(JNIEnv* env, long inNumberMessages, long inNumberMaxBytes, long& outNumberBytesRead, long& outNumberMessagesRead, jbyteArray outMessageData)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA2("CInputStream::GetMessages inNumberMaxBytes = %d inNumberMessages = %d\n", inNumberMaxBytes, inNumberMessages);
+
+	DWORD dwMsgSize = 0;
+	outNumberBytesRead = outNumberMessagesRead = 0;
+
+	BOOL gotIt = WaitForAccess();
+	if (gotIt)
+	{
+
+		pInputStreamInfo pInfo = GetInfoPtr();
+		pInputStreamData pData = GetDataPtr();
+
+		if (pInfo->numberMessages > 0)
+		{
+			if (inNumberMessages == 0 || (inNumberMessages > pInfo->numberMessages))
+				inNumberMessages = pInfo->numberMessages;
+			for (long i = 0; i < inNumberMessages; i++)
+			{
+				pInfo->bufferPeek = pInfo->bufferRead;
+				DoPeekBuffer(pInfo, pData, (BYTE*)&dwMsgSize, sizeof(DWORD));
+
+				if ((outNumberBytesRead + dwMsgSize) > inNumberMaxBytes)
+					break;
+
+				IncrementReadPosition(pInfo, sizeof(DWORD));
+				pInfo->numberBytes -= sizeof(DWORD);
+
+				DWORD lenToEnd = pInfo->bufferCapacity - pInfo->bufferRead;
+				if (lenToEnd > dwMsgSize)
+					lenToEnd = dwMsgSize;
+
+				if (lenToEnd > 0)
+					env->SetByteArrayRegion(outMessageData, outNumberBytesRead, lenToEnd, (jbyte*)&pData[pInfo->bufferRead]);
+
+				DWORD lenRemaining = dwMsgSize - lenToEnd;
+				if (lenRemaining > 0)
+					env->SetByteArrayRegion(outMessageData, outNumberBytesRead+lenToEnd, lenRemaining, (jbyte*)&pData[0]);
+
+				pInfo->bufferSize -= dwMsgSize;
+
+				IncrementReadPosition(pInfo, dwMsgSize);
+
+				outNumberBytesRead += dwMsgSize;
+				outNumberMessagesRead++;
+				pInfo->numberBytes -= dwMsgSize;
+				pInfo->numberMessages--;	
+
+				if ((i % 500) == 0)
+					Sleep(1);
+			}
+		}
+		if (pInfo->numberBytes == 0)
+		{
+			pInfo->bufferRead = pInfo->bufferWrite = 0;
+		}
+		ReleaseAccess();
+	}
+
+#ifdef LOG_PERFORMANCE
+	char msg[200];
+	sprintf(msg, "GetMessages numMsgs = %d numByts = %d\n", outNumberMessagesRead, outNumberBytesRead);
+	LOGPERF(msg);
+#endif
+
+	TCDEBUGLOGA2("CInputStream::GetMessages outNumberBytesRead = %d outNumberMessagesRead = %d\n", outNumberBytesRead, outNumberMessagesRead);
+	TCDEBUGCLOSE();
+	return outNumberMessagesRead;
+}
+#endif // TCF_CLIENT
+
+void CInputStream::GetTotalMessageSize(long inNumberMessages, DWORD& outTotalSize)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA3("CInputStream::GetTotalMessageSize clientId = %d this = %x inNum = %d\n", m_ClientID, this, inNumberMessages);
+
+	outTotalSize = 0;
+	BOOL gotIt = WaitForAccess();
+	if (gotIt)
+	{
+
+		DWORD len = 0;
+
+		pInputStreamData pData = GetDataPtr();
+		pInputStreamFile pFile = GetFilePtr();
+		pInputStreamInfo pInfo = GetInfoPtr();
+
+		DWORD numberToGet = inNumberMessages;
+		if (numberToGet > pInfo->numberMessages) numberToGet = pInfo->numberMessages;
+
+		if (numberToGet > 0)
+		{
+			TCDEBUGLOGA1("CInputStream::GetTotalMessageSize numberToGet = %d\n", numberToGet);
+			pInfo->bufferPeek = pInfo->bufferRead;
+			for (DWORD i = 0; i < numberToGet; i++)
+			{
+				DoPeekBuffer(pInfo, pData, (BYTE*)&len, sizeof(DWORD));
+				outTotalSize += len;
+				IncrementPeekPosition(pInfo, len+sizeof(DWORD));
+			}
+		}
+
+
+		ReleaseAccess();
+	}
+
+#ifdef LOG_PERFORMANCE
+//	char msg[200];
+//	sprintf(msg, "GetTotalMessageSize.outTotalSize = %d\n", outTotalSize);
+	LOGPERF("GetTotalMessageSize\n");
+#endif
+	TCDEBUGLOGA1("CInputStream::GetTotalMessageSize done = %d\n", outTotalSize);
+	TCDEBUGCLOSE();
+
+}
+
+#else // !USE_CIRCULAR_BUFFER
+
+long CInputStream::AddMessage(DWORD inLength, BYTE* inMessage)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA3("CInputStream::AddMessage clientId = %d inLength = %d this = %x\n", m_ClientID, inLength, this);
+
+	long err = TCAPI_ERR_NONE;
+
+	BOOL done = FALSE;
+	if (inLength == 0 || inMessage == NULL)
+		return TCAPI_ERR_NONE;
+
+	WaitForAccess();
+
+	pInputStreamInfo pInfo = GetInfoPtr();
+	pInputStreamData pData = GetDataPtr();
+	pInputStreamFile pFile = GetFilePtr();
+
+	long nfile = pInfo->numberBytesInFile;						// number bytes in file
+	long nbuffer = pInfo->numberBytes - pInfo->numberBytesInFile;	// number bytes in buffer
+
+	TCDEBUGLOGA2("CInputStream::AddMessage numberMessages      =%d numberBytes      =%d\n",pInfo->numberMessages, pInfo->numberBytes);
+	TCDEBUGLOGA2("CInputStream::AddMessage numberMessagesInBuff=%d numberBytesInBuff=%d\n",pInfo->numberMessages-pInfo->numberMessagesInFile, pInfo->numberBytes-pInfo->numberBytesInFile);
+	TCDEBUGLOGA2("CInputStream::AddMessage numberMessagesInFile=%d numberBytesInFile=%d\n",pInfo->numberMessagesInFile, pInfo->numberBytesInFile);
+
+	if (nfile > 0)
+	{
+		// we've already overflowed
+		//  and we are using an overflow file
+		//  so attempt to put message there
+		if ((nfile + inLength + sizeof(DWORD)) <= m_FileSize)
+		{
+			// room to put msg into file
+			BYTE* ptr = pFile;
+			ptr += nfile;
+			*(DWORD*)ptr = inLength;
+			ptr += sizeof(DWORD);
+			memcpy(ptr, inMessage, inLength);
+			pInfo->numberMessages++;
+			pInfo->numberMessagesInFile++;
+			pInfo->numberBytes += inLength + sizeof(DWORD);
+			pInfo->numberBytesInFile += inLength + sizeof(DWORD);
+			done = TRUE;
+		}
+		else
+		{
+			// we just lost a message
+			TCDEBUGLOGS("CInputStream::AddMessage file overflowed - msg lost\n");
+			err = TCAPI_ERR_INPUTSTREAM_FILE_OVERFLOW_MISSED_MSGS;
+		}
+	}
+	else // number of bytes in file == 0 ==> either not overflowed or not using file
+	{
+		// attempt to put message into buffer
+		if ((nbuffer + inLength + sizeof(DWORD)) <= m_BufferSize)
+		{
+			// room to put msg into buffer
+			BYTE* ptr = pData;
+			ptr += nbuffer;
+			*(DWORD*)ptr = inLength;
+			ptr += sizeof(DWORD);
+			memcpy(ptr, inMessage, inLength);
+			pInfo->numberMessages++;
+			pInfo->numberBytes += inLength + sizeof(DWORD);
+			done = TRUE;
+		}
+		else
+		{
+			// overflow to file?
+			if (m_File != NULL)
+			{
+				// room to put msg into file
+				BYTE* ptr = pFile;
+				ptr += nfile;
+				*(DWORD*)ptr = inLength;
+				ptr += sizeof(DWORD);
+				memcpy(ptr, inMessage, inLength);
+				pInfo->numberMessages++;
+				pInfo->numberMessagesInFile++;
+				pInfo->numberBytes += inLength + sizeof(DWORD);
+				pInfo->numberBytesInFile += inLength + sizeof(DWORD);
+				done = TRUE;
+				TCDEBUGLOGS("CInputStream::AddMessage buffer overflowed to file\n");
+				LOGPERF("AddMessage buffer overflowed\n");
+				err = TCAPI_INFO_INPUTSTREAM_BUFFER_OVERFLOW_TO_FILE;
+			}
+			else
+			{
+				// we just lost a message
+				TCDEBUGLOGS("CInputStream::AddMessage buffer overflowed and no file - msg lost\n");
+				err = TCAPI_ERR_INPUTSTREAM_BUFFER_OVERFLOW_MISSED_MSGS;
+			}
+		}
+	}
+	TCDEBUGLOGA2("CInputStream::AddMessage numberMessages      =%d numberBytes      =%d\n",pInfo->numberMessages, pInfo->numberBytes);
+	TCDEBUGLOGA2("CInputStream::AddMessage numberMessagesInBuff=%d numberBytesInBuff=%d\n",pInfo->numberMessages-pInfo->numberMessagesInFile, pInfo->numberBytes-pInfo->numberBytesInFile);
+	TCDEBUGLOGA2("CInputStream::AddMessage numberMessagesInFile=%d numberBytesInFile=%d\n",pInfo->numberMessagesInFile, pInfo->numberBytesInFile);
+
+	LOGPERF("AddMessage\n");
+
+	ReleaseAccess();
+
+	TCDEBUGLOGA1("CInputStream::AddMessage err=%d\n", err);
+	TCDEBUGCLOSE();
+
+	return err;
+}
+DWORD CInputStream::GetNextMessage(DWORD inLength, BYTE* outMessage)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA3("CInputStream::GetNextMessage clientId = %d inLength = %d this = %x\n", m_ClientID, inLength, this);
+
+	BYTE* ptr, *ptrStart;
+	DWORD outMsgLen = 0;
+
+	WaitForAccess();
+
+	DWORD dwMsgSize = 0;
+
+	pInputStreamInfo pInfo = GetInfoPtr();
+	pInputStreamData pData = GetDataPtr();
+	pInputStreamFile pFile = GetFilePtr();
+
+	ptr = ptrStart = pData;
+	TCDEBUGLOGA2("CInputStream::GetNextMessage numberMessages      =%d numberBytes      =%d\n",pInfo->numberMessages, pInfo->numberBytes);
+	TCDEBUGLOGA2("CInputStream::GetNextMessage numberMessagesInBuff=%d numberBytesInBuff=%d\n",pInfo->numberMessages-pInfo->numberMessagesInFile, pInfo->numberBytes-pInfo->numberBytesInFile);
+	TCDEBUGLOGA2("CInputStream::GetNextMessage numberMessagesInFile=%d numberBytesInFile=%d\n",pInfo->numberMessagesInFile, pInfo->numberBytesInFile);
+
+	if (pInfo->numberBytes > 0)
+	{
+		// get 1 msg from buffer
+		dwMsgSize = *(DWORD*)pData;
+		TCDEBUGLOGA1("CInputStream::GetNextMessage 1st msg in buffer = %d\n", dwMsgSize);
+		ptr += sizeof(DWORD);
+		if (inLength > dwMsgSize)
+			inLength = dwMsgSize;
+
+		memcpy(outMessage, ptr, inLength);
+		outMsgLen = inLength;
+		ptr += dwMsgSize;
+
+		// move up rest of buffer msgs to beginning of buffer
+		long moveLen = m_BufferSize - dwMsgSize - sizeof(DWORD);
+//		memcpy(ptrStart, ptr, moveLen);
+		TCDEBUGLOGA1("CInputStream::GetNextMessage move bytes up in buffer = %d\n", moveLen);
+		
+		// adjust totals
+		pInfo->numberMessages--;
+		pInfo->numberBytes = pInfo->numberBytes - dwMsgSize - sizeof(DWORD);
+		
+		// move next file message up to buffer
+		if (m_File != NULL)
+		{
+			// using file
+			if (pInfo->numberBytesInFile > 0)
+			{
+				// messages exist in file
+				dwMsgSize = *(DWORD*)pFile;
+				TCDEBUGLOGA1("CInputStream::GetNextMessage 1st msg in file   = %d\n", dwMsgSize);
+				long nbuffer = pInfo->numberBytes - pInfo->numberBytesInFile; // number bytes in buffer
+				if ((nbuffer + dwMsgSize + sizeof(DWORD)) <= m_BufferSize)
+				{
+					// room in buffer - move to buffer
+					ptrStart = &pData[nbuffer];
+					moveLen = dwMsgSize + sizeof(DWORD);
+					memcpy(ptrStart, pFile, moveLen);
+					TCDEBUGLOGA1("CInputStream::GetNextMessage move from file to buffer = %d\n", moveLen);
+					LOGPERF("GetNextMessage move from file to buffer\n");
+
+					// adjust file totals
+					pInfo->numberMessagesInFile--;
+					pInfo->numberBytesInFile = pInfo->numberBytesInFile - moveLen;
+
+					// move msgs in file up
+					if (pInfo->numberMessagesInFile > 0)
+					{
+						ptr = &pFile[moveLen];	// new end
+						moveLen = pInfo->numberBytesInFile;
+						memcpy(pFile, ptr, moveLen);
+						TCDEBUGLOGA1("CInputStream::GetNextMessage move bytes up in file = %d\n", moveLen);
+					}
+				}
+				else
+				{
+					// no room in buffer for next file msg - leave it there
+					TCDEBUGLOGS("CInputStream::GetNextMessage no room in buffer for message in file - leave it there\n");
+				}
+			}
+		}
+	}
+
+	TCDEBUGLOGA2("CInputStream::GetNextMessage numberMessages      =%d numberBytes      =%d\n",pInfo->numberMessages, pInfo->numberBytes);
+	TCDEBUGLOGA2("CInputStream::GetNextMessage numberMessagesInBuff=%d numberBytesInBuff=%d\n",pInfo->numberMessages-pInfo->numberMessagesInFile, pInfo->numberBytes-pInfo->numberBytesInFile);
+	TCDEBUGLOGA2("CInputStream::GetNextMessage numberMessagesInFile=%d numberBytesInFile=%d\n",pInfo->numberMessagesInFile, pInfo->numberBytesInFile);
+
+	LOGPERF("GetNextMessage\n");
+
+	ReleaseAccess();
+
+	TCDEBUGLOGS("CInputStream::GetNextMessage done\n");
+	TCDEBUGCLOSE();
+
+	return outMsgLen;
+}
+DWORD CInputStream::GetNextMessageSize()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA2("CInputStream::GetNextMessageSize clientId = %d this = %x\n", m_ClientID, this);
+
+	DWORD length = 0;
+
+	WaitForAccess();
+
+	pInputStreamInfo pInfo = GetInfoPtr();
+	pInputStreamData pData = GetDataPtr();
+
+	if (pInfo->numberMessages > 0)
+	{
+		BYTE* ptr = pData;
+		length = *(DWORD*)ptr;
+	}
+
+	ReleaseAccess();
+
+	TCDEBUGLOGA1("CInputStream::GetNextMessageSize length = %d\n", length);
+	TCDEBUGCLOSE();
+
+	LOGPERF("GetNextMessageSize\n");
+	return length;
+}
+void CInputStream::GetMessageSizes(long inNumberMessages, DWORD* outMessageSizes)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA3("CInputStream::GetMessageSizes clientId = %d this = %x inNum = %d\n", m_ClientID, this, inNumberMessages);
+
+	WaitForAccess();
+	pInputStreamData pData = GetDataPtr();
+	pInputStreamFile pFile = GetFilePtr();
+	pInputStreamInfo pInfo = GetInfoPtr();
+
+	long ntotal = pInfo->numberMessages;			// number of total messages (buffer + file)
+	long nfile = pInfo->numberMessagesInFile;		// number of file messages
+	long nbuffer = ntotal - nfile;				// number of buffer messages
+	long nreadtotal = min(ntotal, inNumberMessages);	// number of total messages to read
+	long nreadbuffer = min(nbuffer, nreadtotal);		// number of buffer messages to read
+	long nreadfile = nreadtotal - nreadbuffer;			// number of file messages to read
+	TCDEBUGLOGA3("CInputStream::GetMessageSizes ntotal=%d nfile=%d nbuffer=%d\n", ntotal, nfile, nbuffer);
+	TCDEBUGLOGA3("CInputStream::GetMessageSizes nreadtotal=%d nreadfile=%d nreadbuffer=%d\n", nreadtotal, nreadfile, nreadbuffer);
+
+
+	if (nreadtotal > 0)
+	{
+		if (nreadbuffer > 0)
+		{
+			BYTE* ptr = pData;
+			DWORD prevSize = 0;
+			for (long i = 0; i < nreadbuffer; i++)
+			{
+				DWORD len = *(DWORD*)&ptr[prevSize];
+				outMessageSizes[i] = len;
+				prevSize += len + sizeof(DWORD);
+			}
+		}
+		if (nreadfile > 0)
+		{
+			BYTE* ptr = pFile;
+			DWORD prevSize = 0;
+			for (long i = 0; i < nreadfile; i++)
+			{
+				DWORD len = *(DWORD*)&ptr[prevSize];
+				outMessageSizes[nreadbuffer+i] = len;
+				prevSize += len + sizeof(DWORD);
+			}
+		}
+	}
+
+
+	ReleaseAccess();
+
+	TCDEBUGLOGS("CInputStream::GetMessageSizes done\n");
+	TCDEBUGCLOSE();
+	LOGPERF("GetMessageSizes\n");
+}
+
+void CInputStream::GetTotalMessageSize(long inNumberMessages, DWORD& outTotalSize)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA3("CInputStream::GetTotalMessageSize clientId = %d this = %x inNum = %d\n", m_ClientID, this, inNumberMessages);
+
+	WaitForAccess();
+	pInputStreamData pData = GetDataPtr();
+	pInputStreamFile pFile = GetFilePtr();
+	pInputStreamInfo pInfo = GetInfoPtr();
+
+	long ntotal = pInfo->numberMessages;			// number of total messages (buffer + file)
+	long nfile = pInfo->numberMessagesInFile;		// number of file messages
+	long nbuffer = ntotal - nfile;				// number of buffer messages
+	long nreadtotal = min(ntotal, inNumberMessages);	// number of total messages to read
+	long nreadbuffer = min(nbuffer, nreadtotal);		// number of buffer messages to read
+	long nreadfile = nreadtotal - nreadbuffer;			// number of file messages to read
+	TCDEBUGLOGA3("CInputStream::GetTotalMessageSize ntotal=%d nfile=%d nbuffer=%d\n", ntotal, nfile, nbuffer);
+	TCDEBUGLOGA3("CInputStream::GetTotalMessageSize nreadtotal=%d nreadfile=%d nreadbuffer=%d\n", nreadtotal, nreadfile, nreadbuffer);
+
+	outTotalSize = 0;
+
+	if (nreadtotal > 0)
+	{
+		if (nreadbuffer > 0)
+		{
+			BYTE* ptr = pData;
+			DWORD prevSize = 0;
+			for (long i = 0; i < nreadbuffer; i++)
+			{
+				DWORD len = *(DWORD*)&ptr[prevSize];
+				outTotalSize += len;
+				prevSize += len + sizeof(DWORD);
+			}
+		}
+		if (nreadfile > 0)
+		{
+			BYTE* ptr = pFile;
+			DWORD prevSize = 0;
+			for (long i = 0; i < nreadfile; i++)
+			{
+				DWORD len = *(DWORD*)&ptr[prevSize];
+				outTotalSize += len;
+				prevSize += len + sizeof(DWORD);
+			}
+		}
+	}
+
+
+	ReleaseAccess();
+
+	TCDEBUGLOGS("CInputStream::GetTotalMessageSize done\n");
+	TCDEBUGCLOSE();
+	LOGPERF("GetTotalMessageSize\n");
+}
+#endif // USE_CIRCULAR_BUFFER
+
+LONG CInputStream::GetNumberMessages()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA2("CInputStream::GetNumberMessages clientId = %d this = %x\n", m_ClientID, this);
+
+	LONG number = 0;
+
+	WaitForAccess();
+
+	pInputStreamInfo pInfo = GetInfoPtr();
+
+	number = pInfo->numberMessages;
+
+	ReleaseAccess();
+
+	TCDEBUGLOGA1("CInputStream::GetNumberMessages number = %d\n", number);
+	TCDEBUGCLOSE();
+
+	LOGPERF("GetNumberMessages\n");
+	return number;
+}
+
+
+
+BOOL CInputStreamData::Init()
+{
+	if (IsCreator())
+	{
+	}
+	return TRUE;
+}
+BOOL CInputStreamInfo::Init()
+{
+	if (IsCreator())
+	{
+		pInputStreamInfo pInfo = (pInputStreamInfo)GetDataPtr();
+		pInfo->numberBytes = 0;
+		pInfo->numberMessages = 0;
+		pInfo->numberBytesInFile = 0;
+		pInfo->numberMessagesInFile = 0;
+#ifdef USE_CIRCULAR_BUFFER
+		pInfo->bufferRead = 0;				// where to read from buffer
+		pInfo->bufferPeek = 0;				// where to peek some data from buffer
+		pInfo->bufferWrite = 0;				// where to write to buffer
+		pInfo->bufferSize = 0;				// current size of buffer
+		pInfo->bufferCapacity = 0;			// total capacity of buffer
+#endif
+	}
+	return TRUE;
+}
+
+// real file on disk (ie, not tied to swap file)
+void CInputStreamFile::SetClientId(long clientId)
+{
+	m_ClientID = clientId;
+}
+BOOL CInputStreamFile::Open(DWORD dwSize, CHAR* filePath)
+{
+	BOOL fOk = FALSE;
+
+	// first process (clients) will create and map file
+	// second process (server) will get an error on create, but will go ahead and map
+	m_hFile = CreateFile(
+		filePath, 
+		GENERIC_READ|GENERIC_WRITE, 
+		FILE_SHARE_READ|FILE_SHARE_WRITE,
+		0,
+		CREATE_ALWAYS, 
+		FILE_ATTRIBUTE_NORMAL|FILE_FLAG_DELETE_ON_CLOSE,
+		0);
+
+	char mapname[80];
+	sprintf(mapname, "%s%d", INPUTSTREAMOVERFLOW_MAP_BASENAME, m_ClientID);
+	if (m_hFile != INVALID_HANDLE_VALUE)
+	{
+		// we got a good handle (we might have gotten an error, but create was successful)
+		// create a mapping to this file
+		fOk = CSharedData::Open(m_hFile, dwSize, mapname);
+		TCDEBUGOPEN();
+		TCDEBUGLOGS("CInputStreamFile::Open CreateFile successful\n");
+		TCDEBUGCLOSE();
+	}
+	else
+	{
+		// this causes the open to do an OpenFileMapping instead of a CreateFileMapping (file handle not needed in former)
+		fOk = CSharedData::Open(INVALID_HANDLE_VALUE, dwSize, mapname);
+		TCDEBUGOPEN();
+		TCDEBUGLOGS("CInputStreamFile::Open CreateFile failed\n");
+		TCDEBUGCLOSE();
+	}
+
+	return fOk;
+}
+
+CInputStreamFile::Close()
+{
+	// close all mapping handles
+	CSharedData::Close();
+	
+	// close file
+	if (m_hFile != INVALID_HANDLE_VALUE)
+	{
+		CloseHandle(m_hFile);
+		m_hFile = INVALID_HANDLE_VALUE;
+	}
+}
+
+BOOL CInputStreamFile::Init()
+{
+	return TRUE;
+}
+
+#ifdef LOG_PERFORMANCE
+static void logPerf(char* msg)
+{
+	if (fpLog)
+	{
+		SYSTEMTIME sTime;
+		GetLocalTime(&sTime);
+		fprintf(fpLog, 
+			"%02.2d%02.2d-%02.2d:%02.2d:%02.2d.%03.3d: %s",
+			sTime.wDay, sTime.wMonth, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds,
+			msg);
+
+		numLogged++;
+		if ((numLogged % 1000) == 0)
+			fflush(fpLog);
+	}
+}
+static void openPerf()
+{
+	struct _stat buf;
+	char* dirname = "c:\\tcf";
+	int result = _stat(dirname, &buf);
+	if (result == 0) // exists
+	{
+		if (fpLog == NULL)
+			fpLog = _fsopen(perfFileName, "at", _SH_DENYNO);
+	}
+	else
+	{
+		fpLog = NULL;
+	}
+}
+static void closePerf()
+{
+	if (fpLog)
+	{
+		fflush(fpLog);
+		fclose(fpLog);
+	}
+	fpLog = NULL;
+}
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Source/ServerClient.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,241 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "stdafx.h"
+#include "ServerClient.h"
+#include "TCErrorConstants.h"
+#include <time.h>
+
+#ifdef TCF_CLIENT
+#include "..\..\TCFClient\ClientManager.h"
+extern CClientManager* gManager;
+#endif
+#ifdef TCF_SERVER
+#include "..\..\TCFServer\ServerManager.h"
+extern CServerManager* gManager;
+#endif
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+//#define LOG_SERVERCLIENT
+#if defined(LOG_SERVERCLIENT) && defined(_DEBUG)
+extern BOOL gDoLogging;
+extern char TCDebugMsg[];
+#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { gManager->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+CServerCommand::CServerCommand()
+{
+	// Server commands/responses
+	m_ServerCommandMutex.Open(SERVERCOMMANDDATA_MUTEX_NAME, SERVERCOMMANDDATA_MUTEX_TIMEOUT);
+	m_ServerCommandData.Open(SERVERCOMMANDDATA_MAP_SIZE, SERVERCOMMANDDATA_MAP_NAME);
+	m_ServerCommandData.Init();
+	m_ServerMessageData.Open(SERVERMESSAGEDATA_MAP_SIZE, SERVERMESSAGEDATA_MAP_NAME);
+	m_ServerMessageData.Init();
+
+	m_ServerProcessData.Open(SERVERPROCESSDATA_MAP_SIZE, SERVERPROCESSDATA_MAP_NAME);
+	m_ServerProcessData.Init();
+
+	// General server access
+	m_ServerPipeMutex.Open(SERVERPIPE_MUTEX_NAME, SERVERPIPE_MUTEX_TIMEOUT);
+
+	// command/response events
+	m_hServerCommandReadyEvent = ::CreateEvent(NULL, FALSE, FALSE, SERVER_COMMAND_READY_EVENTNAME);
+	m_hServerResponseReadyEvent = ::CreateEvent(NULL, FALSE, FALSE, SERVER_RESPONSE_READY_EVENTNAME);
+}
+
+CServerCommand::~CServerCommand()
+{
+	m_ServerCommandMutex.Close(); 
+	m_ServerCommandData.Close();
+	m_ServerMessageData.Close();
+
+	m_ServerProcessData.Close();
+
+	m_ServerPipeMutex.Close();
+
+	::CloseHandle(m_hServerCommandReadyEvent);
+	::CloseHandle(m_hServerResponseReadyEvent);
+
+}
+
+// Client methods
+BOOL CServerCommand::SendCommand(pServerCommandData pCmd, DWORD msgLength, BYTE* message)
+{
+	BOOL sent = FALSE;
+
+//	if (pCmd == NULL) return sent;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CServerCommand::SendCommand\n");
+	TCDEBUGCLOSE();
+
+	WaitForServerCommandAccess();
+	
+	pServerCommandData pData1 = GetDataPtr();
+
+	if (pCmd->command != eCmdNone)
+	{
+		memcpy(pData1, pCmd, sizeof(ServerCommandData));
+		if (msgLength > 0 && message != NULL)
+		{
+			pServerMessageData pData2 = GetMsgPtr();
+			pData2->length = msgLength;
+			if (msgLength > 0)
+				memcpy(pData2->message, message, msgLength);
+		}
+		pData1->response = eRspNone; // setup for response
+		sent = TRUE;
+		::SetEvent(m_hServerCommandReadyEvent);
+	}
+
+	ReleaseServerCommandAccess();
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CServerCommand::SendCommand done\n");
+	TCDEBUGCLOSE();
+
+	return sent;
+}
+
+BOOL CServerCommand::GetResponse(pServerCommandData pRsp)
+{
+	BOOL found = FALSE;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CServerCommand::GetResponse\n");
+	TCDEBUGCLOSE();
+
+	if (::WaitForSingleObject(m_hServerResponseReadyEvent, SERVER_CMDRSP_EVENT_TIMEOUT) == WAIT_OBJECT_0)
+	{
+		WaitForServerCommandAccess();
+		pServerCommandData pData = GetDataPtr();
+		if (pData->response != eRspNone)
+		{
+			// response is ready when command is cleared
+			memcpy(pRsp, pData, sizeof(ServerCommandData));
+			found = TRUE;
+		}
+		ReleaseServerCommandAccess();
+	}
+	else
+	{
+		TCDEBUGLOGS("CServerCommand::GetResponse timeout\n");
+		pRsp->response = eRspError;
+		pRsp->error = TCAPI_ERR_COMM_SERVER_RESPONSE_TIMEOUT;
+	}
+#if (0)
+
+	BOOL timeoutoccurred = FALSE;
+	pServerCommandData pData = GetDataPtr();
+	time_t ctime = time(NULL);
+	time_t timeout = ctime + 60; // wait 60 seconds only
+
+//	if (pRsp == NULL) return found;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGA2("CServerCommand::GetResponse time = %d timeout = %d\n", ctime, timeout);
+	TCDEBUGCLOSE();
+
+	while(!found && !timeoutoccurred)
+	{
+		WaitForServerCommandAccess();
+		if (pData->response != eRspNone)
+		{
+			// response is ready when command is cleared
+			memcpy(pRsp, pData, sizeof(ServerCommandData));
+			found = TRUE;
+		}
+		else
+		{
+			time_t ctime = time(NULL);
+			if (ctime >= timeout)
+			{
+				TCDEBUGLOGS("CServerCommand::GetResponse timeout\n");
+				pRsp->response = eRspError;
+				pRsp->error = TCAPI_ERR_COMM_SERVER_RESPONSE_TIMEOUT;
+				timeoutoccurred = TRUE;
+			}
+		}
+		ReleaseServerCommandAccess();
+		Sleep(1);
+	}
+#endif
+	TCDEBUGOPEN();
+	TCDEBUGLOGA1("CServerCommand::GetResponse waiting for response found=%d\n", found);
+	TCDEBUGCLOSE();
+
+	return found;
+}
+// Server methods
+BOOL CServerCommand::GetCommand(pServerCommandData pCmd, pServerMessageData pMsg)
+{
+	BOOL found = FALSE;
+
+	if (::WaitForSingleObject(m_hServerCommandReadyEvent, SERVER_CMDRSP_EVENT_TIMEOUT) == WAIT_OBJECT_0)
+	{
+		pServerCommandData pData1 = GetDataPtr();
+
+		WaitForServerCommandAccess();
+		if (pData1->command != eCmdNone)
+		{
+			memcpy(pCmd, pData1, sizeof(ServerCommandData));
+			if (pMsg)
+			{
+				pServerMessageData pData2 = GetMsgPtr();
+				pMsg->length = pData2->length;
+				memcpy(pMsg->message, pData2->message, pData2->length);
+			}
+			found = TRUE;
+		}
+		ReleaseServerCommandAccess();
+	}
+
+	return found;
+}
+
+BOOL CServerCommand::SendResponse(pServerCommandData pRsp)
+{
+	BOOL sent = FALSE;
+	pServerCommandData pData = GetDataPtr();
+
+	WaitForServerCommandAccess();
+	if (pRsp->response != eRspNone)
+	{
+		memcpy(pData, pRsp, sizeof(ServerCommandData));
+		pData->command = eCmdNone; // setup for next command
+		sent = TRUE;
+		::SetEvent(m_hServerResponseReadyEvent);
+	}
+
+	ReleaseServerCommandAccess();
+
+	return sent;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Source/TCDebugLog.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,142 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "stdafx.h"
+#include "TCDebugLog.h"
+
+TCDebugLog::TCDebugLog()
+{
+	m_fLog = NULL;
+}
+
+TCDebugLog::TCDebugLog(char* baseName, DWORD pid)
+{
+	m_fLog = NULL;
+	char name[30];
+	sprintf(name, "%sMutex%d", baseName, pid);
+	m_Mutex.Open(name, LOG_MUTEX_TIMEOUT);
+
+	sprintf(m_FileName, "c:\\tcf\\%s%d.txt", baseName, pid);
+	m_fLog = _fsopen(m_FileName, "at", _SH_DENYNO);
+}
+
+TCDebugLog::TCDebugLog(char* baseName, DWORD pid, DWORD timeout)
+{
+	m_fLog = NULL;
+	char name[30];
+	sprintf(name, "%sMutex%d", baseName, pid);
+	m_Mutex.Open(name, timeout);
+
+	sprintf(m_FileName, "c:\\tcf\\%s%d.txt", baseName, pid);
+	m_fLog = _fsopen(m_FileName, "at", _SH_DENYNO);
+
+#ifdef _DEBUG
+	FILE* f = fopen("c:\\tcf\\tcdebuglog.txt", "at");
+	fprintf(f, "name=%s m_FileName=%s\n", name, m_FileName);
+	fclose(f);
+#endif
+}
+TCDebugLog::~TCDebugLog()
+{
+	if (m_fLog) 
+	{
+		fflush(m_fLog);
+		fclose(m_fLog);
+		m_fLog = NULL;
+	}
+	m_Mutex.Close();
+}
+
+void TCDebugLog::log(char* msg)
+{
+//	WaitForAccess();
+
+	if (m_fLog)
+	{
+		SYSTEMTIME sTime;
+		GetLocalTime(&sTime);
+		fprintf(m_fLog, 
+			"%02.2d%02.2d-%02.2d:%02.2d:%02.2d.%03.3d: %s",
+			sTime.wDay, sTime.wMonth, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds,
+			msg);
+		fflush(m_fLog);
+	}
+//	ReleaseAccess();
+}
+/*
+void TCDebugLog::log(char* msg, argType type1, void* arg1)
+{
+	switch(type1)
+	{
+	case eCHAR:
+		char t = *(char*)arg1;
+		break;
+	}
+}
+
+void TCDebugLog::log(char* msg, argType type1, void* arg1, argType type2, void* arg2)
+{
+}
+void TCDebugLog::log(char* msg, argType type1, void* arg1, argType type2, void* arg2, argType type3, void* arg3)
+{
+}
+*/
+void TCDebugLog::logTime()
+{
+	SYSTEMTIME sTime;
+	GetLocalTime(&sTime);
+	fprintf(m_fLog, "%02.2d%02.2d-%02.2d:%02.2d:%02.2d.%03.3d: ", sTime.wDay, sTime.wMonth, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);
+}
+#ifdef TCF_SERVER
+//#define _LOG_DEBUG_MUTEX
+#else
+#endif
+BOOL TCDebugLog::WaitForAccess()
+{
+#ifdef _LOG_DEBUG_MUTEX
+	BOOL ok = m_Mutex.Wait();
+	if (ok == FALSE)
+	{
+		log("TCDebugLog::WaitForAccess failed\n");
+	}
+	else
+	{
+		log("TCDebugLog::WaitForAccess OK\n");
+	}
+	return ok;
+#else
+	return m_Mutex.Wait();
+#endif
+}
+
+BOOL TCDebugLog::ReleaseAccess()
+{
+#ifdef _LOG_DEBUG_MUTEX
+	BOOL ok = m_Mutex.Release();
+	if (ok == FALSE)
+	{
+		log("TCDebugLog::ReleaseAccess failed\n");
+	}
+	else
+	{
+		log("TCDebugLog::ReleaseAccess OK\n");
+	}
+	return ok;
+#else
+	return m_Mutex.Release();
+#endif
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Source/mutex.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "stdafx.h"
+#include "mutex.h"
+
+Mutex::Mutex()
+{
+	m_hMutex = NULL;
+	m_waitTimeout = 0L;
+	m_mutexOpen = FALSE;
+}
+Mutex::~Mutex()
+{
+	Close();
+}
+
+BOOL Mutex::Open(CHAR *mutexName, DWORD waitTimeout)
+{
+#ifdef WIN32
+	m_hMutex = ::CreateMutex(NULL, FALSE, mutexName);
+#else
+#error non Win32
+#endif
+	if (m_hMutex == NULL) 
+		m_mutexOpen = FALSE;
+	else
+	{
+		m_mutexOpen = TRUE;
+		m_waitTimeout = waitTimeout;
+	}
+
+	return m_mutexOpen;
+}
+void Mutex::Close()
+{
+	if (m_mutexOpen)
+	{
+#ifdef WIN32
+		::ReleaseMutex(m_hMutex);
+		::CloseHandle(m_hMutex);
+#else
+#error non WIN32
+#endif
+		m_hMutex = NULL;
+		m_mutexOpen = FALSE;
+	}
+}
+BOOL Mutex::Wait()
+{
+#ifdef WIN32
+	DWORD dwWaitResult = ::WaitForSingleObject(m_hMutex, m_waitTimeout); 
+	if (dwWaitResult == WAIT_OBJECT_0)
+	{
+		return TRUE;
+	}
+	return FALSE;
+#else
+#error non WIN32
+#endif
+}
+BOOL Mutex::Release()
+{
+	BOOL ret = FALSE;
+#ifdef WIN32
+	ret = ::ReleaseMutex(m_hMutex);
+#else
+#error non WIN32
+#endif
+
+	return ret;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/Common/Source/shareddata.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,141 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "stdafx.h"
+#include "shareddata.h"
+
+CSharedData::CSharedData()
+{
+	m_fCreator = FALSE;
+	m_hSharedData = NULL;
+	m_lpDataPtr = NULL;
+
+}
+CSharedData::~CSharedData()
+{
+	Close();
+}
+
+// open map backed by OS paging file
+BOOL
+CSharedData::Open(DWORD dwSize, CHAR* name)
+{
+	BOOL fOK = FALSE;
+	m_hSharedData = m_lpDataPtr = NULL;
+
+	m_hSharedData = CreateFileMapping((HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, dwSize, name);
+
+	m_fCreator = (GetLastError() != ERROR_ALREADY_EXISTS);
+	if (!m_fCreator)
+	{
+		// not creator, re-open using Open
+		CloseHandle(m_hSharedData);
+		m_hSharedData = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, name);
+
+	}
+	if (m_hSharedData)
+	{
+		m_lpDataPtr = MapViewOfFile(m_hSharedData, FILE_MAP_ALL_ACCESS, 0, 0, 0);
+		if (m_lpDataPtr == NULL)
+		{
+			CloseHandle(this->m_hSharedData);
+			m_hSharedData = NULL;
+		}
+		else
+			fOK = TRUE;
+	}
+	return fOK;
+}
+
+// open map backed by a real file handle
+BOOL
+CSharedData::Open(HANDLE hFile, DWORD dwSize, CHAR* name)
+{
+	BOOL fOK = FALSE;
+
+	m_hSharedData = m_lpDataPtr = NULL;
+
+	// if hFile is invalid do not create mapping - go directly to open mapping by name
+	if (hFile == INVALID_HANDLE_VALUE)
+	{
+		m_hSharedData = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, name);
+		m_fCreator = FALSE;
+	}
+	else
+	{
+		m_hSharedData = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, dwSize, name);
+		if (m_hSharedData == NULL) // failed
+		{
+		}
+		else
+		{
+			// succeeded
+			m_fCreator = (GetLastError() != ERROR_ALREADY_EXISTS);
+			if (!m_fCreator)
+			{
+				// not creator, re-open using Open
+				CloseHandle(m_hSharedData);
+				m_hSharedData = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, name);
+			}
+		}
+
+	}
+	if (m_hSharedData)
+	{
+		m_lpDataPtr = MapViewOfFile(m_hSharedData, FILE_MAP_ALL_ACCESS, 0, 0, 0);
+		if (m_lpDataPtr == NULL)
+		{
+			CloseHandle(m_hSharedData);
+			m_hSharedData = NULL;
+		}
+		else
+			fOK = TRUE;
+	}
+	return fOK;
+}
+CSharedData::Close()
+{
+	BOOL fIgnore = FALSE;
+
+	if (m_lpDataPtr != NULL)
+	{
+		fIgnore = UnmapViewOfFile(m_lpDataPtr);
+		m_lpDataPtr = NULL;
+	}
+
+	if (m_hSharedData != NULL)
+	{
+		fIgnore = CloseHandle(m_hSharedData);
+		m_hSharedData = NULL;
+	}
+}
+BOOL CSharedData::Init()
+{
+	// intended to be overridden
+	return TRUE;
+}
+
+LPVOID CSharedData::GetDataPtr()
+{
+	return m_lpDataPtr;
+}
+
+BOOL CSharedData::IsCreator()
+{
+	return m_fCreator;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/ClientManager.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,836 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// ClientManager.cpp: implementation of the CClientManager class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "ClientManager.h"
+#include "TCErrorConstants.h"
+#include "resource.h"
+#include <stdio.h>
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+extern char TCDebugMsg[100];
+#define TCDEBUGOPEN() if (gDoLogging) m_DebugLog->WaitForAccess();
+#define TCDEBUGLOGS(s) if (gDoLogging) sprintf(TCDebugMsg,"%s", s); if (gDoLogging) m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) sprintf(TCDebugMsg, s, a1); if (gDoLogging) m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) sprintf(TCDebugMsg, s, a1, a2); if (gDoLogging) m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) sprintf(TCDebugMsg, s, a1, a2, a3); if (gDoLogging) m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGCLOSE() if (gDoLogging) m_DebugLog->ReleaseAccess();
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+#ifdef _DEBUG
+static char* GetErrorText(DWORD inError);
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+CClientManager::CClientManager()
+{
+	m_Server = NULL;
+	m_StreamList = NULL;
+	m_ErrorMonitorList = NULL;
+	m_DebugLog = NULL;
+	m_DllLocation = NULL;
+	m_hServer = NULL;
+	m_hServerThread = NULL;
+	m_Version[0] = NULL;
+	m_ServerLockFile = NULL;
+	m_ServerExeFile = NULL;
+}
+CClientManager::CClientManager(HINSTANCE hinstDLL)
+{
+#ifdef _DEBUG
+	if (gDoLogging)
+		m_DebugLog = new TCDebugLog("TCF_ClientLog", ::GetCurrentProcessId());
+	else
+		m_DebugLog = NULL;
+
+#else
+	m_DebugLog = NULL;
+#endif
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CClientManager::CClientManager\n");
+
+	m_Server = new CServerCommand();
+
+	// lock server access (it might be running)
+	m_Server->WaitforServerPipeAccess();
+
+	m_StreamList = new InputStreamList();
+	m_StreamList->clear();
+
+	m_ErrorMonitorList = new ErrorMonitorList();
+	m_ErrorMonitorList->clear();
+
+	m_DllLocation = new char[MAX_DLLPATHNAME];
+	::GetModuleFileName(hinstDLL, m_DllLocation, MAX_DLLPATHNAME);
+
+	char exeDirectory[MAX_DLLPATHNAME] = {0};
+	strncpy(exeDirectory, m_DllLocation, MAX_DLLPATHNAME);
+	size_t len = strlen(exeDirectory);
+	// remove file
+	for (int i = len-1; i > 0; i--)
+	{
+		if (exeDirectory[i] == PATH_DELIMITER)
+			break;
+	}
+	exeDirectory[i] = NULL;
+
+	m_ServerExeFile = new char[MAX_DLLPATHNAME];
+	sprintf(m_ServerExeFile, "\"%s%c%s\"", exeDirectory, PATH_DELIMITER, SERVER_PROCESS_NAME);
+
+	m_ServerLockFile = new char[MAX_DLLPATHNAME];
+	sprintf(m_ServerLockFile, "%s%c%s", exeDirectory, PATH_DELIMITER, SERVER_LOCKFILE_NAME);
+
+	char name[100];
+	sprintf(name, "%s%ld", ERRORMONITORLIST_MUTEX_BASENAME, ::GetCurrentProcessId());
+	m_ErrorMonitorListMutex.Open(name, ERRORMONITORLIST_MUTEX_TIMEOUT);
+
+	sprintf(name, "%s%ld", INPUTSTREAMLIST_MUTEX_BASENAME, ::GetCurrentProcessId());
+	m_StreamListMutex.Open(name, INPUTSTREAMLIST_MUTEX_TIMEOUT);
+
+	m_hServer = NULL;
+	m_hServerThread = NULL;
+
+	// release server access
+	m_Server->ReleaseServerPipeAccess();
+	int ret = ::LoadString(hinstDLL, IDS_VERSION, m_Version, MAX_VERSION_STRING);
+
+	TCDEBUGCLOSE();
+}
+
+CClientManager::~CClientManager()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CClientManager::~CClientManager\n");
+	pServerProcessData pData = m_Server->GetProcessPtr();
+
+	if (m_Server)
+	{
+		delete m_Server;
+		m_Server = NULL;
+	}
+
+	WaitForStreamListAccess();
+	TCDEBUGLOGA1("CClientManager::~CClientManager: erasing stream list size=%d\n", InputStreamListSize());
+	if (m_StreamList)
+	{
+		InputStreamList::iterator iter;
+		for (iter = m_StreamList->begin(); iter != m_StreamList->end(); iter++)
+		{
+			TCDEBUGLOGS("CClientManager::~CClientManager: erasing stream list next 1\n");
+//			m_StreamList->erase(iter);
+			delete *iter;
+//			TCDEBUGLOGS("CClientManager::~CClientManager: erasing stream list next 2\n");
+		}
+		m_StreamList->clear();
+		TCDEBUGLOGS("CClientManager::~CClientManager: erasing stream list done 1\n");
+		delete m_StreamList;
+		TCDEBUGLOGS("CClientManager::~CClientManager: erasing stream list done 2\n");
+	}
+	ReleaseStreamListAccess();
+	m_StreamListMutex.Close();
+
+	WaitForErrorMonitorListAccess();
+	TCDEBUGLOGA1("CClientManager::~CClientManager: erasing monitor list size=%d\n", ErrorMonitorListSize());
+	if (m_ErrorMonitorList)
+	{
+		ErrorMonitorList::iterator iter;
+		for (iter = m_ErrorMonitorList->begin(); iter != m_ErrorMonitorList->end(); iter++)
+		{
+			TCDEBUGLOGS("CClientManager::~CClientManager: erasing monitor list next 1\n");
+//			m_ErrorMonitorList->erase(iter);
+			delete *iter;
+//			TCDEBUGLOGS("CClientManager::~CClientManager: erasing monitor list next 1\n");
+		}
+		m_ErrorMonitorList->clear();
+		TCDEBUGLOGS("CClientManager::~CClientManager: erasing monitor list done 1\n");
+		delete m_ErrorMonitorList;
+		TCDEBUGLOGS("CClientManager::~CClientManager: erasing monitor list done 2\n");
+	}
+	ReleaseErrorMonitorListAccess();
+	m_ErrorMonitorListMutex.Close();
+
+	if (m_DllLocation)
+	{
+		delete[] m_DllLocation;
+		m_DllLocation = NULL;
+	}
+
+	if (m_ServerLockFile)
+	{
+		delete[] m_ServerLockFile;
+		m_ServerLockFile = NULL;
+	}
+
+	if (m_ServerExeFile)
+	{
+		delete[] m_ServerExeFile;
+		m_ServerExeFile = NULL;
+	}
+	TCDEBUGLOGS("CClientManager::~CClientManager: closing log\n");
+	TCDEBUGCLOSE();
+	if (m_DebugLog)
+	{
+		delete m_DebugLog;
+		m_DebugLog = NULL;
+	}
+}
+CErrorMonitor*
+CClientManager::FindErrorMonitor(long inClientId)
+{
+	CErrorMonitor* errorMonitor = NULL;
+	ErrorMonitorList::iterator iter;
+
+	for (iter = m_ErrorMonitorList->begin(); iter != m_ErrorMonitorList->end(); iter++)
+	{
+		if ((*iter)->IsThisClient(inClientId))
+		{
+			errorMonitor = *iter;
+			break;
+		}
+	}
+	return errorMonitor;
+}
+long CClientManager::ErrorMonitorListSize()
+{
+	long size = m_ErrorMonitorList->size();
+
+	return size;
+}
+void CClientManager::AddErrorMonitor(CErrorMonitor* monitor)
+{
+	m_ErrorMonitorList->push_back(monitor);
+}
+void CClientManager::RemoveErrorMonitor(CErrorMonitor* monitor)
+{
+	ErrorMonitorList::iterator iter;
+
+	for (iter = m_ErrorMonitorList->begin(); iter != m_ErrorMonitorList->end(); iter++)
+	{
+		if ((*iter)->IsThisClient(monitor->GetClientId()))
+		{
+			m_ErrorMonitorList->erase(iter);
+			break;
+		}
+	}
+}
+
+CInputStream*
+CClientManager::FindInputStream(long inClientId)
+{
+	CInputStream* inputStream = NULL;
+	InputStreamList::iterator iter;
+
+	for (iter = m_StreamList->begin(); iter != m_StreamList->end(); iter++)
+	{
+		if ((*iter)->IsThisClient(inClientId))
+//		if ((*iter).IsThisClient(inClientId))
+		{
+			inputStream = *iter;
+//			inputStream = iter;
+			break;
+		}
+	}
+	return inputStream;
+}
+long CClientManager::InputStreamListSize()
+{
+	long size = m_StreamList->size();
+
+	return size;
+}
+void CClientManager::AddInputStream(CInputStream* stream)
+{
+	m_StreamList->push_back(stream);
+//	m_StreamList->push_back(*stream);
+
+}
+void CClientManager::RemoveInputStream(CInputStream* stream)
+{
+	InputStreamList::iterator iter;
+
+	for (iter = m_StreamList->begin(); iter != m_StreamList->end(); iter++)
+	{
+		if ((*iter)->IsThisClient(stream->GetClientId()))
+//		if ((*iter).IsThisClient(stream->GetClientId()))
+		{
+			m_StreamList->erase(iter);
+			break;
+		}
+	}
+}
+
+BOOL CClientManager::StartServer(pServerProcessData pData)
+{
+	TCDEBUGLOGA1("CClientManager::StartServer numRefs = %d\n",pData->numRefs);
+
+	BOOL serverStarted = FALSE;
+	// server is ref counted
+	// refcount = 0 => server is not running
+	// refcount > 0 => server already started by some other process
+	if (pData->numRefs == 0)
+	{
+		// server not running
+		// get exe location
+		char exeLocation[MAX_DLLPATHNAME] = {0};
+		strncpy(exeLocation, m_DllLocation, MAX_DLLPATHNAME);
+		size_t len = strlen(exeLocation);
+		// remove file
+		for (int i = len-1; i > 0; i--)
+		{
+			if (exeLocation[i] == PATH_DELIMITER)
+				break;
+		}
+		exeLocation[i] = NULL;
+		char quotedLocation[MAX_DLLPATHNAME] = {0};
+		sprintf(quotedLocation, "\"%s%c%s\"", exeLocation, PATH_DELIMITER, SERVER_PROCESS_NAME);
+
+		TCDEBUGLOGA1("  exeLocation=%s\n", quotedLocation);
+
+		// create process
+		STARTUPINFO si;
+		memset(&si,0,sizeof(si));
+		si.cb = sizeof(si);
+		memset(&pData->serverProcess, 0, sizeof(pData->serverProcess));
+		pData->serverProcess.hProcess = NULL;
+		if (!::CreateProcess(
+			NULL,			// module location
+			quotedLocation,	// command line
+			NULL,			// process attributes
+			NULL,			// thread attributes
+			FALSE,			// inherit our handles
+			CREATE_NO_WINDOW,	// no window
+			NULL,			// use our environment
+			NULL,			// user our current directory
+			&si,			// startup info
+			&pData->serverProcess)) // process info
+		{
+			// TODO: error creating process
+		}
+		else
+		{
+			// we are the creator so save handles for later
+			m_hServer = pData->serverProcess.hProcess;
+			m_hServerThread = pData->serverProcess.hThread;
+			// add a refcount
+			pData->numRefs++;
+			serverStarted = TRUE;
+		}
+	}
+	else
+	{
+		// already running
+		// add a refcount and open our process handle to it
+		pData->numRefs++;
+		m_hServer = ::OpenProcess(0, FALSE, pData->serverProcess.dwProcessId);
+		serverStarted = TRUE;
+	}
+	TCDEBUGLOGA1("CClientManager::StartServer serverStarted=%d\n", serverStarted);
+	return serverStarted;
+}
+
+BOOL CClientManager::StopServer(pServerProcessData pData)
+{
+	TCDEBUGLOGS("CClientManager::StopServer\n");
+
+	BOOL serverStopped = FALSE;
+
+	if (pData->serverProcess.hProcess == NULL || pData->numRefs <= 0)
+	{
+		serverStopped = TRUE;
+	}
+	else
+	{
+		TCDEBUGLOGA1(" numRefs = %d\n",pData->numRefs); 
+
+		// substract ref count
+		pData->numRefs--;
+		// if refcount == 0 then really stop the server process
+		if (pData->numRefs <= 0)
+		{
+			// last client process is closing
+			// tell server to exit
+			ServerCommandData cmdrsp;
+			cmdrsp.command = eCmdExit;
+		TCDEBUGLOGS(" SendCommand eCmdExit\n");
+			m_Server->SendCommand(&cmdrsp);
+		TCDEBUGLOGS(" GetResponse eExit\n");
+			m_Server->GetResponse(&cmdrsp);
+			// wait for process to exit
+		TCDEBUGLOGS(" WaitForSingleObject start\n");
+			WaitForSingleObject(m_hServer, 10000L /*INFINITE*/);
+		TCDEBUGLOGS(" WaitForSingleObject found\n");
+
+			if (m_hServer != NULL)
+				CloseHandle(m_hServer);
+
+			if (m_hServerThread != NULL)
+				CloseHandle(m_hServerThread);
+		}
+		else
+		{
+			// just close our handle to server process
+			if (m_hServer != NULL)
+				CloseHandle(m_hServer);
+
+			if (m_hServerThread != NULL)
+				CloseHandle(m_hServerThread);
+		}
+	}
+
+	TCDEBUGLOGS("CClientManager::StopServer end\n");
+	return TRUE;
+}
+long CClientManager::StartServer()
+{
+	long ret = TCAPI_ERR_NONE;
+	pServerProcessData pData = m_Server->GetProcessPtr();
+
+	TCDEBUGLOGA3("CClientManager::StartServer this = %x m_hServer = %x numRefs = %d\n", this, m_hServer, pData->numRefs);
+//	TCDEBUGLOGA1("  mgrRefs = %d\n", m_MgrServerRef);
+
+	BOOL serverStarted = FALSE;
+	// server is ref counted
+	// refcount = 0 => server is not running
+	// refcount > 0 => server already started by some other process
+
+	// terminate the TCFServer if it is already running
+	TerminateServerThroughLockFile(pData);
+
+	if (pData->numRefs == 0)
+	{
+		// server not running
+		TCDEBUGLOGA1("  TCFServer exe =%s\n", m_ServerExeFile);
+		TCDEBUGLOGA1("  TCFServer lock=%s\n", m_ServerLockFile);
+
+
+		// create process
+		STARTUPINFO si;
+		memset(&si,0,sizeof(si));
+		si.cb = sizeof(si);
+		memset(&pData->serverProcess, 0, sizeof(pData->serverProcess));
+		pData->serverProcess.hProcess = NULL;
+		if (!::CreateProcess(
+			NULL,			// module location
+			m_ServerExeFile,	// command line
+			NULL,			// process attributes
+			NULL,			// thread attributes
+			FALSE,			// inherit our handles
+			CREATE_NO_WINDOW,	// no window
+			NULL,			// use our environment
+			NULL,			// user our current directory
+			&si,			// startup info
+			&pData->serverProcess)) // process info
+		{
+			// TODO: error creating process
+		}
+		else
+		{
+			// we are the creator so save handles for later
+			m_hServer = pData->serverProcess.hProcess;
+			m_hServerThread = pData->serverProcess.hThread;
+			// add a refcount
+			pData->numRefs++;
+			serverStarted = TRUE;
+			TCDEBUGLOGA3("CClientManager::StartServer created m_hServer = %x processId = %d numRefs = %d\n", m_hServer, pData->serverProcess.dwProcessId, pData->numRefs);
+
+			// create lock file and save process ID
+			TCDEBUGLOGS("CClientManager::StartServer CreateLockFile\n");
+			CreateLockFile(pData->serverProcess.dwProcessId);
+		}
+	}
+	else
+	{
+		// already running
+		// add a refcount and open our process handle to it only if we haven't opened it already
+		pData->numRefs++;
+		if (m_hServer == NULL)
+			m_hServer = ::OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE, FALSE, pData->serverProcess.dwProcessId);
+		if (m_hServer == 0)
+		{
+			TCDEBUGLOGA1("CClientManager::StartServer opened m_hServer null error=%d\n", ::GetLastError());
+		}
+		m_hServerThread = NULL;		// only creator gets real thread handle
+		serverStarted = TRUE;
+		TCDEBUGLOGA3("CClientManager::StartServer opened m_hServer = %x processId = %d numRefs = %d\n", m_hServer, pData->serverProcess.dwProcessId, pData->numRefs);
+		// save our process id to lock file
+		AppendToLockFile(pData->serverProcess.dwProcessId);
+	}
+	if (serverStarted)
+		m_ServerRunning = TRUE;
+
+	TCDEBUGLOGA1("CClientManager::StartServer end numRefs = %d\n", pData->numRefs);
+	return ret;
+}
+
+long CClientManager::StopServer()
+{
+	long ret = TCAPI_ERR_NONE;
+	pServerProcessData pData = m_Server->GetProcessPtr();
+
+	TCDEBUGLOGA3("CClientManager::StopServer this = %x m_hServer = %x numRefs = %d\n", this, m_hServer, pData->numRefs);
+
+	BOOL serverStopped = FALSE;
+
+	if (pData->serverProcess.hProcess == NULL || pData->numRefs <= 0)
+	{
+		TCDEBUGLOGS("CClientManager::StopServer hProcess NULL or numRefs <= 0\n");
+		serverStopped = TRUE;
+	}
+#if (0)
+	else if (m_hServer == NULL)
+	{
+		// we've already closed our handle to server
+		// don't close it again
+		TCDEBUGLOGS("CClientManager::StopServer m_hServer null\n");
+	}
+#endif
+	else
+	{
+		// substract ref count
+		pData->numRefs--;
+		if (pData->numRefs < 0) pData->numRefs = 0;
+		// if refcount == 0 then really stop the server process
+		if (pData->numRefs == 0)
+		{
+			// last client process is closing
+			// tell server to exit
+			ServerCommandData cmdrsp;
+			cmdrsp.command = eCmdExit;
+			
+			TCDEBUGLOGS(" SendCommand eCmdExit\n");
+			m_Server->SendCommand(&cmdrsp);
+			TCDEBUGLOGS(" GetResponse eExit\n");
+			m_Server->GetResponse(&cmdrsp);
+			
+			// wait for process to exit
+			TCDEBUGLOGS(" WaitForSingleObject start\n");
+			DWORD waitErr = ::WaitForSingleObject(m_hServer, 10000L /*INFINITE*/);
+			TCDEBUGLOGA1("CClientManager::StopServer WaitForSingleObject = %d\n", waitErr);
+
+			// now close our handle to server process
+			if (m_hServer != NULL)
+			{
+				CloseHandle(m_hServer);
+				m_hServer = NULL;
+			}
+
+			if (m_hServerThread != NULL)
+			{
+				CloseHandle(m_hServerThread);
+				m_hServerThread = NULL;
+			}
+			serverStopped = TRUE;
+
+			// delete lock file
+			TCDEBUGLOGS("CClientManager::StopServer DeleteLockFile\n");
+			DeleteLockFile();
+		}
+		else
+		{
+			// just close our handle to server process
+
+			if (m_hServer != NULL)
+			{
+				CloseHandle(m_hServer);
+				m_hServer = NULL;
+			}
+
+			if (m_hServerThread != NULL)
+			{
+				CloseHandle(m_hServerThread);
+				m_hServerThread = NULL;
+			}
+			DeleteFromLockFile(pData->serverProcess.dwProcessId);
+		}
+	}
+	if (serverStopped)
+		m_ServerRunning = FALSE;
+
+	TCDEBUGLOGA1("CClientManager::StopServer end numRefs = %d\n", pData->numRefs);
+	return ret;
+}
+
+BOOL CClientManager::IsServerRunning()
+{
+	pServerProcessData pData = m_Server->GetProcessPtr();
+	if (pData->serverProcess.hProcess != NULL)
+		return TRUE;
+	else
+		return FALSE;
+
+}
+
+void CClientManager::CreateLockFile(DWORD processId)
+{
+	if (m_ServerLockFile != NULL)
+	{
+		FILE* f = fopen(m_ServerLockFile, "wt");
+		TCDEBUGLOGA1("CClientManager::CreateLockFile f=%x\n", f);
+
+		if (f)
+		{
+			DWORD callingProcessId = ::GetCurrentProcessId();
+			TCDEBUGLOGA2("CClientManager::CreateLockFile callingProcessId=%d processId=%d\n", callingProcessId, processId);
+			fprintf(f, "%ld %ld\n", callingProcessId, processId);
+			fclose(f);
+		}
+		else
+		{
+			DWORD err = ::GetLastError();
+			TCDEBUGLOGA2("CClientManager::CreateLockFile fopenErr=%d:%s\n", err, GetErrorText(err));
+		}
+	}
+}
+void CClientManager::AppendToLockFile(DWORD processId)
+{
+	if (m_ServerLockFile != NULL)
+	{
+		FILE* f = fopen(m_ServerLockFile, "at");
+		TCDEBUGLOGA1("CClientManager::AppendToLockFile f=%x\n", f);
+
+		if (f)
+		{
+			DWORD callingProcessId = ::GetCurrentProcessId();
+			TCDEBUGLOGA2("CClientManager::AppendToLockFile callingProcessId=%d processId=%d\n", callingProcessId, processId);
+			fprintf(f, "%ld %ld\n", callingProcessId, processId);
+			fclose(f);
+		}
+		else
+		{
+			DWORD err = ::GetLastError();
+			TCDEBUGLOGA2("CClientManager::AppendToLockFile fopenErr=%d:%s\n", err, GetErrorText(err));
+		}
+	}
+}
+void CClientManager::DeleteLockFile()
+{
+	if (m_ServerLockFile != NULL)
+	{
+		TCDEBUGLOGS("CClientManager::DeleteLockFile\n");
+		::remove(m_ServerLockFile);
+	}
+}
+
+void CClientManager::DeleteFromLockFile(DWORD serverProcessId)
+{
+	DWORD callingId[10];
+	DWORD serverId[10];
+	int numIds = 0;
+
+	DWORD ourProcessId = ::GetCurrentProcessId();
+
+	if (m_ServerLockFile != NULL)
+	{
+		DWORD attr = ::GetFileAttributes(m_ServerLockFile);
+		TCDEBUGLOGA1("CClientManager::DeleteFromLockFile attr=%x\n", attr);
+
+		if (attr != 0xffffffff) // error
+		{
+			// file exists
+			// read the process Ids from it 
+
+			FILE *f = fopen(m_ServerLockFile, "rt");
+			TCDEBUGLOGA1("CClientManager::DeleteFromLockFile f=%x\n", f);
+			if (f)
+			{
+				BOOL done = FALSE;
+				while (!done)
+				{
+					DWORD cId = 0xffffffff;
+					DWORD sId = 0xffffffff;
+					int n = fscanf(f, "%ld %ld\n", &cId, &sId);
+					if (n == 2)
+					{
+						TCDEBUGLOGA3("CClientManager::DeleteFromLockFile numIds=%d sId=%d pId=%d\n", numIds, cId, sId);
+						if (cId != ourProcessId || sId != serverProcessId)
+						{
+							callingId[numIds] = cId;
+							serverId[numIds] = sId;
+							numIds++;
+							if (numIds > 9)
+								done = TRUE;
+						}
+					}
+					else
+					{
+						done = TRUE;
+					}
+				}
+				fclose(f);
+			}
+
+			// now rewrite lock file without us
+			::remove(m_ServerLockFile);
+			if (numIds > 0)
+			{
+				f = fopen(m_ServerLockFile, "wt");
+				if (f)
+				{
+					for (int i = 0; i < numIds; i++)
+					{
+						fprintf(f, "%ld %ld\n", callingId[i], serverId[i]);
+					}
+					fclose(f);
+				}
+			}
+		}
+	}
+}
+
+// Currently assumes there is only ONE TCFServer, but multiple client processes (that use that server)
+// we should not have more than a few Carbide processes connecting to the same TCFServer
+void CClientManager::TerminateServerThroughLockFile(pServerProcessData pData)
+{
+	DWORD callingId[10];
+	DWORD serverId[10];
+	BOOL liveCaller[10];
+	int numIds = 0;
+	if (m_ServerLockFile != NULL)
+	{
+		DWORD attr = ::GetFileAttributes(m_ServerLockFile);
+		TCDEBUGLOGA1("CClientManager::TerminateServerThroughLockFile attr=%x\n", attr);
+
+		if (attr != 0xffffffff) // error
+		{
+			// file exists
+			// read the process Ids from it 
+
+			FILE *f = fopen(m_ServerLockFile, "rt");
+			TCDEBUGLOGA1("CClientManager::TerminateServerThroughLockFile f=%x\n", f);
+			if (f)
+			{
+				BOOL done = FALSE;
+				while (!done)
+				{
+					DWORD cId = 0xffffffff;
+					DWORD sId = 0xffffffff;
+					int n = fscanf(f, "%ld %ld\n", &cId, &sId);
+					if (n == 2)
+					{
+						TCDEBUGLOGA3("CClientManager::TerminateServerThroughLockFile n=%d sId=%d pId=%d\n", n, cId, sId);
+						callingId[numIds] = cId;
+						serverId[numIds] = sId;
+						numIds++;
+						if (numIds > 9)
+							done = TRUE;
+					}
+					else
+					{
+						done = TRUE;
+					}
+				}
+				fclose(f);
+
+				int numDeadCallers = 0;
+				for (int i = 0; i < numIds; i++)
+				{
+					HANDLE h = ::OpenProcess(PROCESS_QUERY_INFORMATION, FALSE, callingId[i]);
+					if (h)
+					{
+						// calling process is still alive
+						liveCaller[i] = TRUE;
+						::CloseHandle(h);
+						TCDEBUGLOGA1("CClientManager::TerminateServerThroughLockFile %d alive\n", callingId[i]);
+					}
+					else
+					{
+						liveCaller[i] = FALSE;
+						numDeadCallers++;
+						DWORD err = ::GetLastError();
+						TCDEBUGLOGA3("CClientManager::TerminateServerThroughLockFile %d dead err=%d:%s\n", callingId[i], err, GetErrorText(err));
+					}
+				}
+				if (numDeadCallers == numIds)
+				{
+					// terminate the TCFServer, and delete lock file
+					pData->numRefs = 0;
+					::remove(m_ServerLockFile);
+					HANDLE h = ::OpenProcess(SYNCHRONIZE|PROCESS_TERMINATE, FALSE, serverId[0]);
+					if (h)
+					{
+						BOOL ret = ::TerminateProcess(h, -1);
+						if (ret == 0)
+						{
+							DWORD err = ::GetLastError();
+							TCDEBUGLOGA2("CClientManager::TerminateServerThroughLockFile TerminateProcess=%d:%s\n", err, GetErrorText(err));
+						}
+						::CloseHandle(h);
+					}
+				}
+				else
+				{
+					// leave TCFServer running, recreate lock file and save live callers
+					::remove(m_ServerLockFile);
+					f = fopen(m_ServerLockFile, "wt");
+					if (f)
+					{
+						for (int i = 0; i < numIds; i++)
+						{
+							if (liveCaller[i])
+							{
+								fprintf(f, "%ld %ld\n", callingId[i], serverId[i]);
+							}
+						}
+						fclose(f);
+					}
+					pData->numRefs -= numDeadCallers;
+					if (pData->numRefs < 0) pData->numRefs = 0;
+				}
+			}
+			else
+			{
+				// error opening lock file
+				DWORD err = ::GetLastError();
+				TCDEBUGLOGA2("CClientManager::TerminateServerThroughLockFile fopenErr=%d:%s\n", err, GetErrorText(err));
+			}
+		}
+	}
+}
+#ifdef _DEBUG
+static char* GetErrorText(DWORD inError)
+{
+	static char msg[256];
+	FormatMessage(
+		FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
+		NULL,
+		inError,
+		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+		(LPTSTR) &msg,
+		sizeof(msg) - 1,
+		NULL);
+
+	return msg;
+}
+#else
+static char* GetErrorText(DWORD inError)
+{
+	return NULL;
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/ClientManager.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// ClientManager.h: interface for the CClientManager class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_CLIENTMANAGER_H__D8CD8281_5D57_43E9_922D_9532DC8669C4__INCLUDED_)
+#define AFX_CLIENTMANAGER_H__D8CD8281_5D57_43E9_922D_9532DC8669C4__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+#include <vector>
+#include <list>
+#include "ServerClient.h"
+#include "InputStream.h"
+#include "ErrorMonitorData.h"
+#include "TCErrorConstants.h"
+#include "TCDebugLog.h"
+
+typedef std::vector<CInputStream*> InputStreamList;
+typedef std::vector<CErrorMonitor*> ErrorMonitorList;
+//typedef std::vector<CInputStream> InputStreamList;
+
+#define ERRORMONITORLIST_MUTEX_BASENAME		"TCFErrorMonitorList"
+#define ERRORMONITORLIST_MUTEX_TIMEOUT		(60000L)
+#define INPUTSTREAMLIST_MUTEX_BASENAME		"TCFInputStreamList"
+#define INPUTSTREAMLIST_MUTEX_TIMEOUT		(60000L)
+
+#ifdef WIN32
+#define SERVER_PROCESS_NAME		"TCFServer.exe"
+#define SERVER_LOCKFILE_NAME	"TCFServer.lock"
+#define PATH_DELIMITER			'\\'
+#else
+#error not WIN32
+#endif
+
+#define MAX_DLLPATHNAME (2048)
+
+class CClientManager  
+{
+public:
+	CClientManager();
+	CClientManager(HINSTANCE hinstDLL);
+	virtual ~CClientManager();
+
+	// starting/stopping server
+	BOOL StartServer(pServerProcessData pData);
+	BOOL StopServer(pServerProcessData pData);
+	long StartServer();
+	long StopServer();
+	BOOL IsServerRunning(); // { return m_ServerRunning; }
+	BOOL m_ServerRunning;
+	void TerminateServerThroughLockFile(pServerProcessData pData);
+	void CreateLockFile(DWORD processId);
+	void AppendToLockFile(DWORD processId);
+	void DeleteLockFile();
+	void DeleteFromLockFile(DWORD processId);
+
+	// input stream
+	CInputStream* FindInputStream(long inClientId);
+	long InputStreamListSize();
+	void RemoveInputStream(CInputStream* inputStream);
+	void AddInputStream(CInputStream* stream);
+	BOOL WaitForStreamListAccess() { return m_StreamListMutex.Wait(); }
+	BOOL ReleaseStreamListAccess() { return m_StreamListMutex.Release(); }
+	Mutex m_StreamListMutex;
+
+	// error monitors
+	CErrorMonitor* FindErrorMonitor(long inClientId);
+	long ErrorMonitorListSize();
+	void RemoveErrorMonitor(CErrorMonitor* errorMonitor);
+	void AddErrorMonitor(CErrorMonitor* monitor);
+	BOOL WaitForErrorMonitorListAccess() { return m_ErrorMonitorListMutex.Wait(); }
+	BOOL ReleaseErrorMonitorListAccess() { return m_ErrorMonitorListMutex.Release(); }
+	Mutex m_ErrorMonitorListMutex;
+
+	CServerCommand* m_Server;
+	TCDebugLog* m_DebugLog;
+	InputStreamList* m_StreamList;
+	ErrorMonitorList* m_ErrorMonitorList;
+	char* m_DllLocation;
+	HANDLE m_hServer;			// our handle to the server process (per process)
+	HANDLE m_hServerThread;		// handle to server main thread (creator process only)
+	char m_Version[MAX_VERSION_STRING]; // our version string
+
+	char* m_ServerLockFile; // TCFServer lock file name at the DLL location
+	char* m_ServerExeFile;	// TCFServer exe
+
+};
+
+#endif // !defined(AFX_CLIENTMANAGER_H__D8CD8281_5D57_43E9_922D_9532DC8669C4__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/ReadMe.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,41 @@
+========================================================================
+       DYNAMIC LINK LIBRARY : TCFClient
+========================================================================
+
+
+AppWizard has created this TCFClient DLL for you.  
+
+This file contains a summary of what you will find in each of the files that
+make up your TCFClient application.
+
+TCFClient.dsp
+    This file (the project file) contains information at the project level and
+    is used to build a single project or subproject. Other users can share the
+    project (.dsp) file, but they should export the makefiles locally.
+
+TCFClient.cpp
+    This is the main DLL source file.
+
+	When created, this DLL does not export any symbols. As a result, it 
+	will not produce a .lib file when it is built. If you wish this project
+	to be a project dependency of some other project, you will either need to 
+	add code to export some symbols from the DLL so that an export library 
+	will be produced, or you can check the "doesn't produce lib" checkbox in 
+	the Linker settings page for this project. 
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+    These files are used to build a precompiled header (PCH) file
+    named TCFClient.pch and a precompiled types file named StdAfx.obj.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+
+/////////////////////////////////////////////////////////////////////////////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/StdAfx.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// stdafx.cpp : source file that includes just the standard includes
+//	TCFClient.pch will be the pre-compiled header
+//	stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/StdAfx.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// stdafx.h : include file for standard system include files,
+//  or project specific include files that are used frequently, but
+//      are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__EED2AD88_9849_4B81_852F_D207E6D97FE2__INCLUDED_)
+#define AFX_STDAFX_H__EED2AD88_9849_4B81_852F_D207E6D97FE2__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#define TCF_CLIENT
+
+// Insert your headers here
+#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
+
+
+#include <windows.h>
+
+// TODO: reference additional headers your program requires here
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__EED2AD88_9849_4B81_852F_D207E6D97FE2__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCAPIConnectionJni.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,1639 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "stdafx.h"
+#include "TCAPIConnectionJni.h"
+#include "TCConstants.h"
+#include "TCErrorConstants.h"
+#include "ClientManager.h"
+#include "ServerClient.h"
+#include "TCDebugLog.h"
+#include "InputStream.h"
+#include "ErrorMonitorData.h"
+#include <list>
+#include <vector>
+
+extern CClientManager* gManager;
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+char TCDebugMsg[100];
+#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { gManager->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+#ifdef _DEBUG
+FILE* fLog1 = NULL;
+FILE* fLog2 = NULL;
+static void OpenLogFile1(char* filename);
+static void CloseLogFile1();
+static void OpenLogFile2(char* filename);
+static void CloseLogFile2();
+#define OPENLOGf1(f) OpenLogFile1(f)
+#define CLOSELOG1() CloseLogFile1()
+#define OPENLOGf2(f) OpenLogFile2(f)
+#define CLOSELOG2() CloseLogFile2()
+#else
+#define OPENLOGf1(f)
+#define CLOSELOG1()
+#endif
+
+static void ConvertRealSerialSettingsToHost(char* pBaud, char* pDataBits, char* pParity, char* pStopBits, char* pFlowControl, pRealSerialConnectData pData);
+static void ConvertRealSerialSettingsToServer(const char* pBaud, const char* pDataBits, const char* pParity, const char* pStopBits, const char* pFlowControl, pRealSerialConnectData pData);
+static const char* GetErrorText(unsigned long error);
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeConnect
+ * Signature: (Ljava/lang/String;[J[Ljava/lang/String;[JLjava/lang/String;[J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeConnect
+  (JNIEnv *env, jobject pThis, jstring inType, jlongArray inOptions, jobjectArray inSettings, jlongArray inMessageOptions, jstring inFilePath, jlongArray outClientId)
+ {
+ 	// inOptions are connection options
+ 	// inMessageOptions are client's message options
+	// inFilePath will be null if message destination is not DESTINATION_CLIENTFILE 
+	long ret = TCAPI_ERR_NONE;
+	unsigned long osError = 0;
+	long clientId;
+
+	TCDEBUGOPEN();
+
+	TCDEBUGLOGS("nativeConnect\n");
+
+	gManager->m_Server->WaitforServerPipeAccess();
+
+	{
+		jboolean isCopy = false;
+		// options per connection
+		jlong* pOptions = env->GetLongArrayElements(inOptions, &isCopy);
+		DWORD retryInterval = (DWORD)pOptions[0];
+		DWORD retryTimeout = (DWORD)pOptions[1];
+
+
+
+		env->ReleaseLongArrayElements(inOptions, pOptions, 0);
+
+		pOptions = env->GetLongArrayElements(inMessageOptions, &isCopy);
+
+		// options per client
+		long unWrapFormat = pOptions[0];
+		long ostVersion = pOptions[1];
+		env->ReleaseLongArrayElements(inMessageOptions, pOptions, 0);
+
+
+		TCDEBUGLOGA2(" retryInterval=%d, retryTimeout=%d\n", retryInterval, retryTimeout);
+
+		TCDEBUGLOGA3(" unWrapFormat=%d, ostVersion=%d destination=%s\n", unWrapFormat, ostVersion, ((inFilePath == NULL) ? "stream" : "file"));
+
+		char* pType = (char*)env->GetStringUTFChars(inType, &isCopy);
+		TCDEBUGLOGA1("  pType = %s\n", pType);
+
+		if (strcmp(pType, "musti") == 0 || strcmp(pType, "platsim") == 0) 
+		{
+			jstring addString = (jstring)env->GetObjectArrayElement(inSettings, 0);
+			jstring portString = (jstring)env->GetObjectArrayElement(inSettings, 1);
+			jstring chanString = (jstring)env->GetObjectArrayElement(inSettings, 2);
+			jstring decodeString = (jstring)env->GetObjectArrayElement(inSettings, 3);
+
+			const char* pAddress = env->GetStringUTFChars(addString, NULL);
+			const char* pPort = env->GetStringUTFChars(portString, NULL);
+			const char* pChan = env->GetStringUTFChars(chanString, NULL);
+			const char* pDecode = env->GetStringUTFChars(decodeString, NULL);
+
+			TCDEBUGLOGA2(" TCP: ipAddress=%s, ipPort=%s\n", pAddress, pPort);
+			TCDEBUGLOGA2(" TCP: channel=%s, decode=%s\n", pChan, pDecode);
+
+			ServerCommandData cmd;
+			cmd.command = eCmdConnect;
+			strncpy(cmd.connectSettings.connectType, pType, MAX_CONNECTION_TYPE);
+			strncpy(cmd.connectSettings.tcpSettings.ipAddress, pAddress, MAX_IPADDRESS_SIZE);
+			strncpy(cmd.connectSettings.tcpSettings.ipPort, pPort, MAX_PORT_SIZE);
+
+			cmd.connectSettings.retryInterval = retryInterval;
+			cmd.connectSettings.retryTimeout = retryTimeout;
+			strncpy(cmd.connectSettings.decodeFormat, pDecode, MAX_DECODE_FORMAT);
+
+			if (pChan != NULL)
+			{
+				if (strcmp(pChan, "1") == 0)
+				{
+					cmd.connectSettings.traceBoxChannel = 1;
+				}
+				else
+				{
+					cmd.connectSettings.traceBoxChannel = 2;
+				}
+			}
+			else
+			{
+				cmd.connectSettings.traceBoxChannel = 2;
+			}
+
+
+			cmd.clientOptions.unWrapFormat = unWrapFormat;
+			cmd.clientOptions.ostVersion = ostVersion;
+
+			gManager->m_Server->SendCommand(&cmd);
+			gManager->m_Server->GetResponse(&cmd);
+
+			if (cmd.response == eRspError)
+			{
+				TCDEBUGLOGA1("  from server: ret = %d\n", cmd.error);
+				ret = cmd.error;
+				osError = cmd.osError;
+			}
+			else
+			{
+				TCDEBUGLOGA1("  from server: id = %d\n", cmd.clientId);
+				clientId = cmd.clientId;
+
+				gManager->WaitForErrorMonitorListAccess();
+				TCDEBUGLOGS(" TODO: create error monitor storage if server connected\n");
+				CErrorMonitor* monitor = new CErrorMonitor(clientId);
+				if (monitor != NULL)
+				{
+					monitor->CreateData();
+					gManager->AddErrorMonitor(monitor);
+				}
+
+				gManager->ReleaseErrorMonitorListAccess();
+
+				TCDEBUGLOGA1(" clientId=%d\n", clientId);
+				jlong jClientId = clientId;
+				env->SetLongArrayRegion(outClientId, 0, 1, &jClientId);
+
+			}
+			env->ReleaseStringUTFChars(addString, pAddress);
+			env->ReleaseStringUTFChars(portString, pPort);
+			env->ReleaseStringUTFChars(chanString, pChan);
+			env->ReleaseStringUTFChars(decodeString, pDecode);
+		}
+		else if (strcmp(pType, "tcp") == 0)
+		{
+			jstring addString = (jstring)env->GetObjectArrayElement(inSettings, 0);
+			jstring portString = (jstring)env->GetObjectArrayElement(inSettings, 1);
+			jstring decodeString = (jstring)env->GetObjectArrayElement(inSettings, 2);
+
+			const char* pAddress = env->GetStringUTFChars(addString, NULL);
+			const char* pPort = env->GetStringUTFChars(portString, NULL);
+			const char* pDecode = env->GetStringUTFChars(decodeString, NULL);
+
+			TCDEBUGLOGA3(" TCP: ipAddress=%s, ipPort=%s decode=%s\n", pAddress, pPort, pDecode);
+
+			ServerCommandData cmd;
+			cmd.command = eCmdConnect;
+			strncpy(cmd.connectSettings.connectType, pType, MAX_CONNECTION_TYPE);
+			strncpy(cmd.connectSettings.tcpSettings.ipAddress, pAddress, MAX_IPADDRESS_SIZE);
+			strncpy(cmd.connectSettings.tcpSettings.ipPort, pPort, MAX_PORT_SIZE);
+
+			cmd.connectSettings.retryInterval = retryInterval;
+			cmd.connectSettings.retryTimeout = retryTimeout;
+			strncpy(cmd.connectSettings.decodeFormat, pDecode, MAX_DECODE_FORMAT);
+			cmd.clientOptions.unWrapFormat = unWrapFormat;
+			cmd.clientOptions.ostVersion = ostVersion;
+
+			gManager->m_Server->SendCommand(&cmd);
+			gManager->m_Server->GetResponse(&cmd);
+
+			if (cmd.response == eRspError)
+			{
+				TCDEBUGLOGA1("  from server: ret = %d\n", cmd.error);
+				ret = cmd.error;
+				osError = cmd.osError;
+			}
+			else
+			{
+				TCDEBUGLOGA1("  from server: id = %d\n", cmd.clientId);
+				clientId = cmd.clientId;
+
+				gManager->WaitForErrorMonitorListAccess();
+				TCDEBUGLOGS(" TODO: create error monitor storage if server connected\n");
+				CErrorMonitor* monitor = new CErrorMonitor(clientId);
+				if (monitor != NULL)
+				{
+					monitor->CreateData();
+					gManager->AddErrorMonitor(monitor);
+				}
+
+				gManager->ReleaseErrorMonitorListAccess();
+
+				TCDEBUGLOGA1(" clientId=%d\n", clientId);
+				jlong jClientId = clientId;
+				env->SetLongArrayRegion(outClientId, 0, 1, &jClientId);
+
+			}
+			env->ReleaseStringUTFChars(addString, pAddress);
+			env->ReleaseStringUTFChars(portString, pPort);
+			env->ReleaseStringUTFChars(decodeString, pDecode);
+		}
+		else if (strcmp(pType, "virtualserial") == 0)
+		{
+			jstring portString = (jstring)env->GetObjectArrayElement(inSettings, 0);
+			const char* pPort = env->GetStringUTFChars(portString, NULL);
+			jstring decodeString = (jstring)env->GetObjectArrayElement(inSettings, 1);
+			const char* pDecode = env->GetStringUTFChars(decodeString, NULL);
+
+			TCDEBUGLOGA2(" vserial: pPort=%s decode=%s\n", pPort, pDecode);
+
+			ServerCommandData cmd;
+			cmd.command = eCmdConnect;
+			strncpy(cmd.connectSettings.connectType, pType, MAX_CONNECTION_TYPE); 
+			strncpy(cmd.connectSettings.virtualSerialSettings.comPort, pPort, MAX_COMPORT_SIZE);
+
+			cmd.connectSettings.retryInterval = retryInterval;
+			cmd.connectSettings.retryTimeout = retryTimeout;
+			strncpy(cmd.connectSettings.decodeFormat, pDecode, MAX_DECODE_FORMAT);
+			cmd.clientOptions.unWrapFormat = unWrapFormat;
+			cmd.clientOptions.ostVersion = ostVersion;
+
+			gManager->m_Server->SendCommand(&cmd);
+			gManager->m_Server->GetResponse(&cmd);
+
+			if (cmd.response == eRspError)
+			{
+				TCDEBUGLOGA1("  from server: ret = %d\n", cmd.error);
+				ret = cmd.error;
+				osError = cmd.osError;
+			}
+			else
+			{
+				TCDEBUGLOGA1("  from server: id = %d\n", cmd.clientId);
+				clientId = cmd.clientId;
+
+				gManager->WaitForErrorMonitorListAccess();
+				CErrorMonitor* monitor = new CErrorMonitor(clientId);
+				if (monitor != NULL)
+				{
+					monitor->CreateData();
+					gManager->AddErrorMonitor(monitor);
+				}
+
+				gManager->ReleaseErrorMonitorListAccess();
+
+				TCDEBUGLOGA1(" clientId=%d\n", clientId);
+				jlong jClientId = clientId;
+				env->SetLongArrayRegion(outClientId, 0, 1, &jClientId);
+			}
+			env->ReleaseStringUTFChars(portString, pPort);
+			env->ReleaseStringUTFChars(decodeString, pDecode);
+		}
+		else if (strcmp(pType, "serial") == 0)
+		{
+			jstring portString = (jstring)env->GetObjectArrayElement(inSettings, 0);
+			const char* pPort = env->GetStringUTFChars(portString, NULL);
+
+			jstring baudString = (jstring)env->GetObjectArrayElement(inSettings, 1);
+			const char* pBaud = env->GetStringUTFChars(baudString, NULL);
+			
+			jstring dataBitsString = (jstring)env->GetObjectArrayElement(inSettings, 2);
+			const char* pDataBits = env->GetStringUTFChars(dataBitsString, NULL);
+			
+			jstring parityString = (jstring)env->GetObjectArrayElement(inSettings, 3);
+			const char* pParity = env->GetStringUTFChars(parityString, NULL);
+			
+			jstring stopBitsString = (jstring)env->GetObjectArrayElement(inSettings, 4);
+			const char* pStopBits = env->GetStringUTFChars(stopBitsString, NULL);
+			
+			jstring flowControlString = (jstring)env->GetObjectArrayElement(inSettings, 5);
+			const char* pFlowControl = env->GetStringUTFChars(flowControlString, NULL);
+
+			jstring decodeString = (jstring)env->GetObjectArrayElement(inSettings, 6);
+			const char* pDecode = env->GetStringUTFChars(decodeString, NULL);
+
+			TCDEBUGLOGA3(" real serial: pPort=%s pBaud=%s pDataBits=%s\n", pPort, pBaud, pDataBits);
+
+			ServerCommandData cmd;
+			cmd.command = eCmdConnect;
+			strncpy(cmd.connectSettings.connectType, pType, MAX_CONNECTION_TYPE); 
+			strncpy(cmd.connectSettings.realSerialSettings.comPort, pPort, MAX_COMPORT_SIZE);
+			ConvertRealSerialSettingsToServer(pBaud, pDataBits, pParity, pStopBits, pFlowControl, &cmd.connectSettings.realSerialSettings);
+
+			cmd.connectSettings.retryInterval = retryInterval;
+			cmd.connectSettings.retryTimeout = retryTimeout;
+			strncpy(cmd.connectSettings.decodeFormat, pDecode, MAX_DECODE_FORMAT);
+			cmd.clientOptions.unWrapFormat = unWrapFormat;
+			cmd.clientOptions.ostVersion = ostVersion;
+
+			gManager->m_Server->SendCommand(&cmd);
+			gManager->m_Server->GetResponse(&cmd);
+
+			if (cmd.response == eRspError)
+			{
+				TCDEBUGLOGA1("  from server: ret = %d\n", cmd.error);
+				ret = cmd.error;
+				osError = cmd.osError;
+			}
+			else
+			{
+				TCDEBUGLOGA1("  from server: id = %d\n", cmd.clientId);
+				clientId = cmd.clientId;
+
+				gManager->WaitForErrorMonitorListAccess();
+				CErrorMonitor* monitor = new CErrorMonitor(clientId);
+				if (monitor != NULL)
+				{
+					monitor->CreateData();
+					gManager->AddErrorMonitor(monitor);
+				}
+
+				gManager->ReleaseErrorMonitorListAccess();
+
+				TCDEBUGLOGA1(" clientId=%d\n", clientId);
+				jlong jClientId = clientId;
+				env->SetLongArrayRegion(outClientId, 0, 1, &jClientId);
+			}
+			env->ReleaseStringUTFChars(portString, pPort);
+			env->ReleaseStringUTFChars(baudString, pBaud);
+			env->ReleaseStringUTFChars(dataBitsString, pDataBits);
+			env->ReleaseStringUTFChars(parityString, pParity);
+			env->ReleaseStringUTFChars(stopBitsString, pStopBits);
+			env->ReleaseStringUTFChars(flowControlString, pFlowControl);
+			env->ReleaseStringUTFChars(decodeString, pDecode);
+		}
+		else
+		{
+			TCDEBUGLOGS(" TCAPI_ERR_MEDIA_NOT_SUPPORTED\n");
+			ret = TCAPI_ERR_MEDIA_NOT_SUPPORTED;
+		}
+
+		env->ReleaseStringUTFChars(inType, pType);
+
+		
+		// handle message destinations
+		//  input stream is done by java on open input stream not here
+		//  message file is done here
+		if (ret == TCAPI_ERR_NONE)
+		{
+			long destination = DESTINATION_INPUTSTREAM;
+			char* pMessageFile = NULL;
+			if (inFilePath != NULL)
+			{
+				destination = DESTINATION_CLIENTFILE;
+				jboolean isCopy=FALSE;
+				pMessageFile = (char*)env->GetStringUTFChars(inFilePath, &isCopy);
+
+				// send to TCFServer
+				ServerCommandData cmd;
+				cmd.command = eCmdOpenMessageFile;
+				cmd.clientId = clientId;
+				cmd.destinationOptions.destination = eDestinationFile;
+				strncpy(cmd.destinationOptions.destinationFile, pMessageFile, MAX_FILEPATH);
+				gManager->m_Server->SendCommand(&cmd);
+				gManager->m_Server->GetResponse(&cmd);
+
+				env->ReleaseStringUTFChars(inFilePath, pMessageFile);
+			}
+		}
+	}
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA3("nativeConnect return ret=%d, osError=%d : %s\n", ret, osError, GetErrorText(osError));
+
+	TCDEBUGCLOSE();
+
+	if (ret != TCAPI_ERR_NONE && osError > 0)
+	{
+		jclass clazz = env->FindClass("Ljava/lang/Exception;");
+		env->ThrowNew(clazz, GetErrorText(osError));
+	}
+
+	return ret;
+}
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeDisconnect
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeDisconnect
+  (JNIEnv *env, jobject pThis, jlong inClientId)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativeDisconnect\n");
+
+	if (gManager->m_Server == NULL)
+	{
+		TCDEBUGLOGS(" TCAPI_ERR_INVALID_HANDLE - gServer NULL\n");
+		ret = TCAPI_ERR_INVALID_HANDLE;
+	}
+	else if (inClientId <= 0)
+	{
+		TCDEBUGLOGS(" TCAPI_ERR_INVALID_HANDLE - inClientId <= 0\n");
+		ret = TCAPI_ERR_INVALID_HANDLE;
+	}
+	else
+	{
+		gManager->m_Server->WaitforServerPipeAccess();
+
+		BOOL found = FALSE;
+		long id = inClientId;
+
+		TCDEBUGLOGA1(" look for clientId=%d\n", id);
+
+		TCDEBUGLOGS(" TODO: tell server to disconnect this client\n");
+		ServerCommandData cmdrsp;
+		pServerCommandData pCmdrsp = &cmdrsp;
+		pCmdrsp->command = eCmdDisconnect;
+		pCmdrsp->clientId = id;
+
+		gManager->m_Server->SendCommand(pCmdrsp);
+		gManager->m_Server->GetResponse(pCmdrsp);
+		if (pCmdrsp->response == eRspError)
+		{
+			ret = pCmdrsp->error;
+		}
+
+		{
+			gManager->WaitForErrorMonitorListAccess();
+			TCDEBUGLOGS(" TODO: destroy error monitor for this client\n");
+			CErrorMonitor *monitor = gManager->FindErrorMonitor(id);
+			if (monitor != NULL)
+			{
+				gManager->RemoveErrorMonitor(monitor);
+				delete monitor;
+			}
+			gManager->ReleaseErrorMonitorListAccess();
+		}
+		gManager->m_Server->ReleaseServerPipeAccess();
+	}
+
+	TCDEBUGLOGA1(" return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+	return ret;
+}
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeGetNumberConnections
+ * Signature: ([J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetNumberConnections
+  (JNIEnv *env, jobject pThis, jlongArray outNumber)
+{
+	long ret = TCAPI_ERR_NONE;
+	long number = 0;
+
+	TCDEBUGOPEN();
+	gManager->m_Server->WaitforServerPipeAccess();
+
+	TCDEBUGLOGS("nativeGetNumberConnections\n");
+	ServerCommandData cmdrsp;
+	pServerCommandData pCmdrsp = &cmdrsp;
+	pCmdrsp->command = eCmdGetNumberConnections;
+
+	BOOL sent = gManager->m_Server->SendCommand(pCmdrsp);
+
+	BOOL recd = gManager->m_Server->GetResponse(pCmdrsp);
+	if (pCmdrsp->response == eRspError)
+	{
+		ret = pCmdrsp->error;
+	}
+	else
+	{
+		number = pCmdrsp->numConnections;
+
+		jlong jNumber = number;
+		env->SetLongArrayRegion(outNumber, 0, 1, &jNumber);
+
+		TCDEBUGLOGA1(" number=%d\n", number);
+	}
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA1(" return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+	return ret;
+}
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeGetTypeOfConnection
+ * Signature: (J[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetTypeOfConnection
+  (JNIEnv *env, jobject pThis, jlong inIndex, jobjectArray outType)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	TCDEBUGOPEN();
+	gManager->m_Server->WaitforServerPipeAccess();
+
+	TCDEBUGLOGS("nativeGetTypeOfConnection\n");
+	ServerCommandData cmdrsp;
+	pServerCommandData pCmdrsp = &cmdrsp;
+	pCmdrsp->command = eCmdGetConnectionType;
+	pCmdrsp->index = inIndex;
+
+	BOOL sent = gManager->m_Server->SendCommand(pCmdrsp);
+
+	BOOL recd = gManager->m_Server->GetResponse(pCmdrsp);
+	if (pCmdrsp->response == eRspError)
+	{
+		ret = pCmdrsp->error;
+	}
+	else
+	{
+		env->SetObjectArrayElement(outType, 0, env->NewStringUTF(pCmdrsp->connectSettings.connectType));
+	}
+
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA1(" return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+
+	return ret;
+}
+
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeGetConnectionSettings
+ * Signature: (J[Ljava/lang/String;[J[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetConnectionSettings
+  (JNIEnv *env, jobject pThis, jlong inIndex, jobjectArray outType, jlongArray outOptions, jobjectArray outSettings)
+{
+	long ret = TCAPI_ERR_FEATURE_NOT_IMPLEMENTED;
+
+	TCDEBUGOPEN();
+	gManager->m_Server->WaitforServerPipeAccess();
+
+	TCDEBUGLOGS("nativeGetConnectionSettings\n");
+	ServerCommandData cmdrsp;
+	pServerCommandData pCmdrsp = &cmdrsp;
+	pCmdrsp->command = eCmdGetConnection;
+	pCmdrsp->index = inIndex;
+
+	BOOL sent = gManager->m_Server->SendCommand(pCmdrsp);
+
+	BOOL recd = gManager->m_Server->GetResponse(pCmdrsp);
+	if (pCmdrsp->response == eRspError)
+	{
+		ret = pCmdrsp->error;
+	}
+	else
+	{
+		env->SetObjectArrayElement(outType, 0, env->NewStringUTF(pCmdrsp->connectSettings.connectType));
+		if (strcmp(pCmdrsp->connectSettings.connectType, "musti") == 0 || strcmp(pCmdrsp->connectSettings.connectType, "platsim") == 0)
+		{
+			env->SetObjectArrayElement(outSettings, 0, env->NewStringUTF(pCmdrsp->connectSettings.tcpSettings.ipAddress));
+			env->SetObjectArrayElement(outSettings, 1, env->NewStringUTF(pCmdrsp->connectSettings.tcpSettings.ipPort));
+			char *pChan = NULL;
+			if (pCmdrsp->connectSettings.traceBoxChannel == 1)
+				pChan = "1";
+			else
+				pChan = "2";
+			env->SetObjectArrayElement(outSettings, 2, env->NewStringUTF(pChan));
+			env->SetObjectArrayElement(outSettings, 3, env->NewStringUTF(pCmdrsp->connectSettings.decodeFormat));
+		}
+		else if (strcmp(pCmdrsp->connectSettings.connectType, "tcp") == 0)
+		{
+			env->SetObjectArrayElement(outSettings, 0, env->NewStringUTF(pCmdrsp->connectSettings.tcpSettings.ipAddress));
+			env->SetObjectArrayElement(outSettings, 1, env->NewStringUTF(pCmdrsp->connectSettings.tcpSettings.ipPort));
+			env->SetObjectArrayElement(outSettings, 2, env->NewStringUTF(pCmdrsp->connectSettings.decodeFormat));
+		}
+		else if (strcmp(pCmdrsp->connectSettings.connectType, "virtualserial") == 0)
+		{
+			env->SetObjectArrayElement(outSettings, 0, env->NewStringUTF(pCmdrsp->connectSettings.virtualSerialSettings.comPort));
+			env->SetObjectArrayElement(outSettings, 1, env->NewStringUTF(pCmdrsp->connectSettings.decodeFormat));
+		}
+		else if (strcmp(pCmdrsp->connectSettings.connectType, "serial") == 0)
+		{
+			env->SetObjectArrayElement(outSettings, 0, env->NewStringUTF(pCmdrsp->connectSettings.realSerialSettings.comPort));
+
+			char baud[10], databits[10], parity[10], stopbits[10], flowcontrol[15];
+			ConvertRealSerialSettingsToHost(baud, databits, parity, stopbits, flowcontrol, &pCmdrsp->connectSettings.realSerialSettings);
+			env->SetObjectArrayElement(outSettings, 1, env->NewStringUTF(baud));
+			env->SetObjectArrayElement(outSettings, 2, env->NewStringUTF(databits));
+			env->SetObjectArrayElement(outSettings, 3, env->NewStringUTF(parity));
+			env->SetObjectArrayElement(outSettings, 4, env->NewStringUTF(stopbits));
+			env->SetObjectArrayElement(outSettings, 5, env->NewStringUTF(flowcontrol));
+			env->SetObjectArrayElement(outSettings, 6, env->NewStringUTF(pCmdrsp->connectSettings.decodeFormat));
+		}
+		else if (strcmp(pCmdrsp->connectSettings.connectType, "usb") == 0)
+		{
+			env->SetObjectArrayElement(outSettings, 0, env->NewStringUTF(pCmdrsp->connectSettings.usbSettings.device));
+		}
+		jlong jRetryInterval = pCmdrsp->connectSettings.retryInterval;
+		env->SetLongArrayRegion(outOptions, 0, 1, &jRetryInterval);
+		jlong jRetryTimeout = pCmdrsp->connectSettings.retryTimeout;
+		env->SetLongArrayRegion(outOptions, 1, 1, &jRetryTimeout);
+	}
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA1(" return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+	return ret;
+}
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativePollError
+ * Signature: (J[I[Z[J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativePollError
+  (JNIEnv *env, jobject pThis, jlong inClientId, jintArray outErrorCode, 
+	jbooleanArray outHasOSErrorCode, jlongArray outOSErrorCode)
+{
+	jboolean foundError = false;
+	long id = inClientId;
+	LONG tcfError = TCAPI_ERR_NONE;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativePollError\n");
+//	TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+	gManager->WaitForErrorMonitorListAccess();
+
+	if (gManager->ErrorMonitorListSize() > 0)
+	{
+//		TCDEBUGLOGA1(" size of gManager->ErrorMonitorListSize=%d\n", gManager->ErrorMonitorListSize());
+
+		CErrorMonitor* errorMonitor = gManager->FindErrorMonitor(id);
+//		TCDEBUGLOGA1(" errorMonitor = %x\n", errorMonitor);
+
+		if (errorMonitor != NULL)
+		{
+//			TCDEBUGLOGS(" found client\n");
+
+			BOOL osErrorUsed = FALSE;
+			DWORD osError = 0;
+			BOOL found = errorMonitor->GetError(&tcfError, &osErrorUsed, &osError);
+			if (found)
+			{
+//				TCDEBUGLOGA1("nativePollError error for client=%d\n", inClientId);
+//				TCDEBUGLOGA3(" found tcfError=%d, osErrorUsed=%d, osError=%d\n",
+//					tcfError, osErrorUsed, osError);
+
+				foundError = true;
+				jint jval = tcfError;
+				env->SetIntArrayRegion(outErrorCode, 0, 1, &jval);
+				jboolean jos = osErrorUsed;
+				env->SetBooleanArrayRegion(outHasOSErrorCode, 0, 1, &jos);
+				jlong jlval = osError;
+				env->SetLongArrayRegion(outOSErrorCode, 0, 1, &jlval);
+
+//				TCDEBUGOPEN();
+//				TCDEBUGLOGS("nativePollError found error\n");
+//				TCDEBUGCLOSE();
+			}
+		}
+	}
+	gManager->ReleaseErrorMonitorListAccess();
+
+	TCDEBUGLOGA2(" return foundError=%d tcfError=%d\n", foundError, tcfError);
+
+	TCDEBUGCLOSE();
+	return foundError;
+}
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeGetNumberVersionEntities
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetNumberVersionEntities
+  (JNIEnv *env, jobject pThis, jlong inClientId)
+{
+	long number = 0;
+	long id = inClientId;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativeGetNumberVersionEntities\n");
+	TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+	gManager->m_Server->WaitforServerPipeAccess();
+
+	// eCmdGetNumberVersions
+	ServerCommandData cmdrsp;
+	pServerCommandData pCmdrsp = &cmdrsp;
+	pCmdrsp->command = eCmdGetNumberVersions;
+	pCmdrsp->clientId = id;
+
+	BOOL sent = gManager->m_Server->SendCommand(pCmdrsp);
+
+	BOOL recd = gManager->m_Server->GetResponse(pCmdrsp);
+	if (pCmdrsp->response == eRspError)
+	{
+	}
+	else
+	{
+		number = pCmdrsp->number + 1; // + 1 for DLL version
+	}
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA1(" numberVersions = %d\n", number);
+	TCDEBUGCLOSE();
+	return number;
+}
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeGetVersion
+ * Signature: (JJ[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetVersion
+  (JNIEnv *env, jobject pThis, jlong inClientId, jlong inNumToGet, jobjectArray outVersion)
+{
+	long ret = TCAPI_ERR_NONE;
+	long id = inClientId;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativeGetVersion\n");
+	TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+	gManager->m_Server->WaitforServerPipeAccess();
+
+	// eCmdGetVersion
+	ServerCommandData cmdrsp;
+	pServerCommandData pCmdrsp = &cmdrsp;
+	pCmdrsp->command = eCmdGetVersion;
+	pCmdrsp->clientId = id;
+
+
+	// index = 0 ==> TCFClient.dll version
+	env->SetObjectArrayElement(outVersion, 0, env->NewStringUTF(gManager->m_Version));
+	long numberGot = 1;
+
+	if (inNumToGet > 0)
+	{
+		// index = 1 ==> TCFServer.exe version
+		pCmdrsp->command = eCmdGetVersion;
+		pCmdrsp->clientId = id;
+		pCmdrsp->index = 1;
+		BOOL sent = gManager->m_Server->SendCommand(pCmdrsp);
+		BOOL recd = gManager->m_Server->GetResponse(pCmdrsp);
+		if (pCmdrsp->response == eRspOK)
+		{
+			env->SetObjectArrayElement(outVersion, 1, env->NewStringUTF(pCmdrsp->version));
+			numberGot++;
+
+			if (inNumToGet > 1)
+			{
+				// index = 2 ==> connection version
+				pCmdrsp->command = eCmdGetVersion;
+				pCmdrsp->clientId = id;
+				pCmdrsp->index = 2;
+				BOOL sent = gManager->m_Server->SendCommand(pCmdrsp);
+				BOOL recd = gManager->m_Server->GetResponse(pCmdrsp);
+				if (pCmdrsp->response == eRspOK)
+				{
+					env->SetObjectArrayElement(outVersion, 2, env->NewStringUTF(pCmdrsp->version));
+					numberGot++;
+				}
+			}
+		}
+	}
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA1(" return numberGot=%d\n", numberGot);
+	TCDEBUGCLOSE();
+	return numberGot;
+}
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativePollInputStream
+ * Signature: (J[J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativePollInputStream
+  (JNIEnv *env, jobject pThis, jlong inClientId, jlongArray outNumberMessages)
+{
+	long ret = TCAPI_ERR_NONE;
+	long number = 0;
+	long id = inClientId;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativePollInputStream\n");
+	TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+	TCDEBUGLOGS(" TODO: get number from client's input stream\n");
+
+	gManager->WaitForStreamListAccess();
+
+	CInputStream* inputStream = gManager->FindInputStream(id);
+
+	if (inputStream != NULL)
+	{
+		TCDEBUGLOGA1(" -- found id inputStream=%x\n", inputStream);
+		number = inputStream->GetNumberMessages();
+	}
+
+	gManager->ReleaseStreamListAccess();
+	jlong jNumber = number;
+	env->SetLongArrayRegion(outNumberMessages, 0, 1, &jNumber);
+
+	TCDEBUGLOGA2(" numberMessages=%d ret=%d\n", number, ret);
+
+	TCDEBUGCLOSE();
+	return ret;
+}
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativePollInputStream2
+ * Signature: (JJ[J[J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativePollInputStream2
+  (JNIEnv *env, jobject pThis, jlong inClientId, jlong inNumberMessagesToPeek, jlongArray outNumberMessagesPeeked, jlongArray outNumberBytesPeeked)
+{
+	long ret = TCAPI_ERR_NONE;
+	long id = inClientId;
+	long numberToGet = inNumberMessagesToPeek;
+	long numberStored = 0;
+	DWORD numberBytes = 0;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativePollInputStream2\n");
+	TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+	gManager->WaitForStreamListAccess();
+
+	CInputStream* inputStream = gManager->FindInputStream(id);
+
+	if (inputStream != NULL)
+	{
+		TCDEBUGLOGA1(" -- found id inputStream=%x\n", inputStream);
+		numberStored = inputStream->GetNumberMessages();
+
+		if ((numberToGet == 0) || (numberToGet > numberStored))
+		{
+			numberToGet = numberStored;
+		}
+		if (numberToGet > 0)
+		{
+			inputStream->GetTotalMessageSize(numberToGet, numberBytes);
+		}
+	}
+
+	gManager->ReleaseStreamListAccess();
+
+	jlong jNumber = numberToGet;
+	env->SetLongArrayRegion(outNumberMessagesPeeked, 0, 1, &jNumber);
+	jNumber = numberBytes;
+	env->SetLongArrayRegion(outNumberBytesPeeked, 0, 1, &jNumber);
+
+	TCDEBUGLOGA3(" numberMessages=%d numberBytes=%d ret=%d\n", numberToGet, numberBytes, ret);
+
+	TCDEBUGCLOSE();
+	return ret;
+}
+
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeGetInputStreamMessageBytes
+ * Signature: (JJ[J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetInputStreamMessageBytes
+  (JNIEnv *env, jobject pThis, jlong inClientId, jlong inNumberMessages, jlongArray outMessageSizes)
+{
+	long ret = TCAPI_ERR_NONE;
+	long id = inClientId;
+	long numberToGet = inNumberMessages;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativeGetInputStreamMessageBytes\n");
+	TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+	gManager->WaitForStreamListAccess();
+
+	CInputStream* inputStream = gManager->FindInputStream(id);
+
+	if (inputStream != NULL)
+	{
+		TCDEBUGLOGA1(" -- found id inputStream=%x\n", inputStream);
+		DWORD* pSizes = new DWORD[numberToGet];
+		inputStream->GetMessageSizes(numberToGet, pSizes);
+		for (int i = 0; i < numberToGet; i++)
+		{
+			TCDEBUGLOGA2(" -- message size[%d] = %d\n", i, pSizes[i]);
+			jlong jsize = pSizes[i];
+			env->SetLongArrayRegion(outMessageSizes, i, 1, &jsize);
+		}
+		delete[] pSizes;
+	}
+
+	gManager->ReleaseStreamListAccess();
+
+	TCDEBUGLOGA1("nativeGetInputStreamMessageBytes ret=%d\n", ret);
+
+	TCDEBUGCLOSE();
+
+	return ret;
+}
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeReadInputStream
+ * Signature: (JJ[J[JJ[B)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeReadInputStream
+  (JNIEnv *env, jobject pThis, jlong inClientId, jlong inNumberMessages, jlongArray outNumberMessages, jlongArray outNumberBytesRead, jlong inNumberMaxBytes, jbyteArray outMessageData)
+{
+	long ret = TCAPI_ERR_NONE;
+	long id = inClientId;
+	long numberToGet = inNumberMessages;
+	long numberMaxBytes = inNumberMaxBytes;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativeReadInputStream start\n");
+	TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+	gManager->WaitForStreamListAccess();
+
+	CInputStream* inputStream = gManager->FindInputStream(id);
+	if (inputStream != NULL)
+	{
+		long numberBytesRead = 0;
+		long numberMessagesRead = 0;
+#if (0)
+		DWORD mSize = 0;
+		DWORD outOffset = 0;
+		BYTE* pData = new BYTE[64*1024];
+		for (int i = 0; i < numberToGet; i++)
+		{
+			TCDEBUGLOGS("nativeReadInputStream 1\n");
+			mSize = inputStream->GetNextMessageSize();
+			if ((numberBytesRead + mSize) > numberMaxBytes)
+				break;
+			if (mSize != 0)
+			{
+				mSize = inputStream->GetNextMessage(mSize, pData);
+				TCDEBUGLOGA3("outOffset = %d mSize = %d pData[0] = %02.2x\n", outOffset, mSize, pData[0]);
+				jbyte* pByte = (jbyte*)pData;
+				env->SetByteArrayRegion(outMessageData, outOffset, mSize, pByte);
+				outOffset += mSize;
+				numberBytesRead += mSize;
+				numberMessagesRead++;
+
+				if ((i % 500) == 0)
+					Sleep(1);
+			}
+		}
+		delete [] pData;
+#endif
+		numberMessagesRead = inputStream->GetMessages(env, numberToGet, numberMaxBytes, numberBytesRead, numberMessagesRead, outMessageData);
+		jlong jMsgs = numberMessagesRead;
+		env->SetLongArrayRegion(outNumberMessages, 0, 1, &jMsgs);
+		jlong jNum = numberBytesRead;
+		env->SetLongArrayRegion(outNumberBytesRead, 0, 1, &jNum);
+
+		TCDEBUGLOGS("nativeReadInputStream 2\n");
+	}
+
+	gManager->ReleaseStreamListAccess();
+
+	TCDEBUGLOGA1(" return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+	return ret;
+}
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeOpenInputStream
+ * Signature: (JLjava/lang/String;JZ)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeOpenInputStream
+  (JNIEnv *env, jobject pThis, jlong inClientId, jstring inFileBaseName, jlong inStreamSize, jboolean inOverflowToFile)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativeOpenInputStream\n");
+	TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+	TCDEBUGLOGA1(" inFileBaseName=%x\n", inFileBaseName);
+	TCDEBUGLOGA1(" inStreamSize=%d\n", inStreamSize);
+	TCDEBUGLOGA1(" inOverflowToFile=%d\n", inOverflowToFile);
+
+	gManager->m_Server->WaitforServerPipeAccess();
+	gManager->WaitForStreamListAccess();
+
+	char* pFileName = NULL;
+
+	if (inFileBaseName != NULL)
+	{
+		TCDEBUGLOGS("nativeOpenInputStream GetStringUTFChars on inFileBaseName\n");
+		jboolean isCopy=FALSE;
+		pFileName = (char*)env->GetStringUTFChars(inFileBaseName, &isCopy);
+		TCDEBUGLOGS("nativeOpenInputStream return GetStringUTFChars\n");
+		TCDEBUGLOGA1(" pFileName=%x\n", pFileName);
+//		if (pFileName != NULL)
+//		{
+//			TCDEBUGLOGA1(" pFileName=%s\n", pFileName);
+//		}
+	}
+	else
+	{
+		TCDEBUGLOGS("nativeOpenInputStream inFileBaseName == NULL\n");
+	}
+
+
+	TCDEBUGLOGS("nativeOpenInputStream continue after GetStringUTFChars\n");
+	DWORD streamSize = inStreamSize;
+	TCDEBUGLOGA1(" streamSize=%d\n", streamSize);
+
+	BOOL overflowOption = FALSE;
+	TCDEBUGLOGA1(" overflowOption=%d\n", overflowOption);
+
+	long id = inClientId;
+
+	TCDEBUGLOGA1(" gManager->InputStreamListSize=%d\n", gManager->InputStreamListSize());
+
+	// create stream
+	CInputStream* stream = new CInputStream(pFileName, streamSize, overflowOption, id);
+	stream->CreateStream();
+	gManager->AddInputStream(stream);
+
+	ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+	pCmdrsp->command = eCmdOpenStream;
+	pCmdrsp->clientId = id;
+	pCmdrsp->destinationOptions.destination = eDestinationInputStream;
+	pCmdrsp->destinationOptions.streamSize = streamSize;
+	pCmdrsp->destinationOptions.overFlowToFile = FALSE;
+	if (pFileName != NULL)
+	{
+		strncpy(pCmdrsp->destinationOptions.destinationFile, pFileName, MAX_FILEPATH);
+	}
+	else
+	{
+		pCmdrsp->destinationOptions.destinationFile[0] = NULL;
+	}
+	if (inFileBaseName != NULL)
+	{
+		TCDEBUGLOGS("nativeOpenInputStream ReleaseStringUTFChars on inFileBaseName\n");
+		env->ReleaseStringUTFChars(inFileBaseName, pFileName);
+	}
+
+	gManager->m_Server->SendCommand(pCmdrsp);
+	gManager->m_Server->GetResponse(pCmdrsp);
+
+	if (pCmdrsp->response == eRspError)
+	{
+		ret = pCmdrsp->error;
+	}
+
+	TCDEBUGLOGA1(" gManager->InputStreamListSize=%d\n", gManager->InputStreamListSize());
+
+	gManager->ReleaseStreamListAccess();
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA1(" return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+
+	return ret;
+}
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeCloseInputStream
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeCloseInputStream
+  (JNIEnv *env, jobject pThis, jlong inClientId)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativeCloseInputStream\n");
+	TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+	
+	gManager->m_Server->WaitforServerPipeAccess();
+	gManager->WaitForStreamListAccess();
+
+	long id = inClientId;
+
+	TCDEBUGLOGA1(" gManager->InputStreamListSize=%d\n", gManager->InputStreamListSize());
+
+	TCDEBUGLOGS(" TODO: tell server to close this stream\n");
+
+	ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+	pCmdrsp->command = eCmdCloseStream;
+	pCmdrsp->clientId = id;
+
+	gManager->m_Server->SendCommand(pCmdrsp);
+	gManager->m_Server->GetResponse(pCmdrsp);
+
+	if (pCmdrsp->response == eRspError)
+	{
+		ret = pCmdrsp->error;
+	}
+
+	CInputStream* inputStream = gManager->FindInputStream(id);
+	if (inputStream != NULL)
+	{
+		TCDEBUGLOGA1(" -- found id inputStream=%x\n", inputStream);
+		gManager->RemoveInputStream(inputStream);
+		delete inputStream;
+	}
+
+	TCDEBUGLOGA1(" gManager->InputStreamListSize=%d\n", gManager->InputStreamListSize());
+	gManager->ReleaseStreamListAccess();
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA1(" return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+	return ret;
+}
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeSetMessageIds
+ * Signature: (J[B)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeSetMessageIds
+  (JNIEnv *env, jobject pThis, jlong inClientId, jbyteArray inIds)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativeSetMessageIds\n");
+	TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+	gManager->m_Server->WaitforServerPipeAccess();
+
+	ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+
+	pCmdrsp->command = eCmdSetMessageIds;
+	pCmdrsp->clientId = inClientId;
+	jsize numberIds = env->GetArrayLength(inIds);
+	pCmdrsp->number = numberIds;
+	jboolean isCopy = FALSE;
+	jbyte* bytes = env->GetByteArrayElements(inIds, &isCopy);
+	for (int i = 0; i < numberIds; i++)
+	{
+		pCmdrsp->messageIds[i] = bytes[i];
+		TCDEBUGLOGA1(" -- msgId = 0x%02.2X\n",  pCmdrsp->messageIds[i]);
+	}
+	env->ReleaseByteArrayElements(inIds, bytes, 0);
+	gManager->m_Server->SendCommand(pCmdrsp);
+	gManager->m_Server->GetResponse(pCmdrsp);
+
+	if (pCmdrsp->response == eRspError)
+	{
+		ret = pCmdrsp->error;
+	}
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA1(" return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+	return ret;
+}
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeClearFile
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeClearFile
+  (JNIEnv *env, jobject pThis, jlong inClientId)
+{
+	long ret = TCAPI_ERR_NONE;
+	gManager->m_Server->WaitforServerPipeAccess();
+
+	long id = inClientId;
+
+	ServerCommandData cmdrsp;
+	pServerCommandData pCmdrsp = &cmdrsp;
+	pCmdrsp->command = eCmdClearMessageFile;
+	pCmdrsp->clientId = id;
+
+	gManager->m_Server->SendCommand(pCmdrsp);
+	gManager->m_Server->GetResponse(pCmdrsp);
+	if (pCmdrsp->response == eRspError)
+	{
+		ret = pCmdrsp->error;
+	}
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	return ret;
+}
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeSendMessage
+ * Signature: (J[J[Ljava/lang/String;[B)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeSendMessage
+  (JNIEnv *env, jobject pThis, jlong inClientId, jlongArray inFormattingOptions, jobjectArray inSettings, jbyteArray inMessage)
+{
+	long ret = TCAPI_ERR_NONE;
+	unsigned long osError = 0;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativeSendMessage\n");
+	TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+	gManager->m_Server->WaitforServerPipeAccess();
+
+	jboolean isCopy = false;
+	// formatting options
+	jlong* pOptions = env->GetLongArrayElements(inFormattingOptions, &isCopy);
+//	long encodeFormat = (long)pOptions[0];	// not used
+	long encodeOption = (long)pOptions[1];	// formatting option for protocol
+	long protocolVersion = (long)pOptions[2];	// OST version byte to use if protocol is OST
+	BYTE myId = (BYTE)(pOptions[3] & 0xff);	// my message ID to use of adding protocol
+	BOOL useMyId = (pOptions[4] == 1) ? TRUE : FALSE;	// use my ID or not
+	env->ReleaseLongArrayElements(inFormattingOptions, pOptions, 0);
+
+	jstring decodeString = (jstring)env->GetObjectArrayElement(inSettings, 0);
+	const char* pDecode = env->GetStringUTFChars(decodeString, NULL); // not used
+	env->ReleaseStringUTFChars(decodeString, pDecode);
+
+	jsize numberBytes = 0;
+	if (inMessage != NULL)
+		numberBytes = env->GetArrayLength(inMessage);
+	long inLength = numberBytes;		// this can be null
+
+	jbyte* inData = NULL;
+	if (inLength > 0)
+		inData = env->GetByteArrayElements(inMessage, &isCopy);
+
+	ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+
+	pCmdrsp->command = eCmdSendMessage;
+	pCmdrsp->clientId = inClientId;
+	pCmdrsp->encodeOption = encodeOption;
+	pCmdrsp->useMyId = useMyId;
+	pCmdrsp->myId = myId;
+	pCmdrsp->protocolVersion = protocolVersion & 0xff;
+
+	// send message to server
+	pCmdrsp->osError = 0;
+	gManager->m_Server->SendCommand(pCmdrsp, inLength, (BYTE*)inData);
+
+	TCDEBUGLOGS(" nativeSendMessage  GetResponse\n");
+
+	// get response from server
+	gManager->m_Server->GetResponse(pCmdrsp);
+
+	if (pCmdrsp->response == eRspError)
+	{
+		ret = pCmdrsp->error;
+		osError = pCmdrsp->osError;
+	}
+	if (inData != NULL)
+		env->ReleaseByteArrayElements(inMessage, inData, 0);
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA3("nativeSendMessage return ret=%d, osError=%d : %s\n", ret, osError, GetErrorText(osError));
+	TCDEBUGCLOSE();
+
+	if (ret == TCAPI_ERR_COMM_ERROR && osError > 0)
+	{
+		jclass clazz = env->FindClass("Ljava/lang/Exception;");
+		env->ThrowNew(clazz, GetErrorText(osError));
+	}
+	return ret;
+}
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeStart
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeStart
+  (JNIEnv *env, jobject pThis, jlong inClientId)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativeStart\n");
+	TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+	gManager->m_Server->WaitforServerPipeAccess();
+
+	TCDEBUGLOGS(" TODO: tell server to start this client\n");
+	ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+
+	pCmdrsp->command = eCmdStart;
+	pCmdrsp->clientId = inClientId;
+
+	gManager->m_Server->SendCommand(pCmdrsp);
+
+	gManager->m_Server->GetResponse(pCmdrsp);
+
+	if (pCmdrsp->response == eRspError)
+	{
+		ret = pCmdrsp->error;
+	}
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA1(" return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+	return ret;
+}
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeStop
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeStop
+  (JNIEnv *env, jobject pThis, jlong inClientId)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativeStop\n");
+	TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+	gManager->m_Server->WaitforServerPipeAccess();
+
+	TCDEBUGLOGS(" TODO: tell server to stop this client\n");
+	ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+
+	pCmdrsp->command = eCmdStop;
+	pCmdrsp->clientId = inClientId;
+
+	gManager->m_Server->SendCommand(pCmdrsp);
+
+	gManager->m_Server->GetResponse(pCmdrsp);
+
+	if (pCmdrsp->response == eRspError)
+	{
+		ret = pCmdrsp->error;
+	}
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA1(" return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+	return ret;
+}
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeTestConnection
+ * Signature: (I[J[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeTestConnection__I_3J_3Ljava_lang_String_2
+  (JNIEnv *env, jobject pThis, jint inType, jlongArray inOptions, jobjectArray inSettings)
+{
+	long ret = TCAPI_ERR_FEATURE_NOT_IMPLEMENTED;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativeTestConnection\n");
+
+	gManager->m_Server->WaitforServerPipeAccess();
+
+	TCDEBUGLOGS(" TODO: ask server to test this connection\n");
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA1(" return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+
+	return ret;
+}
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeTestConnection
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeTestConnection__J
+  (JNIEnv *env, jobject pThis, jlong inClientId)
+{
+	long ret = TCAPI_ERR_FEATURE_NOT_IMPLEMENTED;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativeTestConnection\n");
+	TCDEBUGLOGA1(" inClientId=%d\n", inClientId);
+
+	gManager->m_Server->WaitforServerPipeAccess();
+
+	TCDEBUGLOGS(" TODO: ask server to test this client's connection\n");
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA1(" return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+
+	return ret;
+}
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeStartServer
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeStartServer
+  (JNIEnv *env, jobject pThis)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativeStartServer\n");
+
+	gManager->m_Server->WaitforServerPipeAccess();
+
+	ret = gManager->StartServer();
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA1(" return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+
+	return ret;
+}
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeStopServer
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeStopServer
+  (JNIEnv *env, jobject pThis)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("nativeStopServer\n");
+
+	gManager->m_Server->WaitforServerPipeAccess();
+
+	ret = gManager->StopServer();
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA1(" return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+
+	return ret;
+}
+
+void ConvertRealSerialSettingsToServer(const char* pBaud, const char* pDataBits, const char* pParity, const char* pStopBits, const char* pFlowControl, pRealSerialConnectData pData)
+{
+	// no error checking - all error checking is done at the Java level
+	pData->baudRate = atol(pBaud);
+	pData->dataBits = atol(pDataBits);
+
+	pData->parity = eParityNone;
+	if (strcmp(pParity, "odd") == 0)
+	{
+		pData->parity = eParityOdd;
+	}
+	else if (strcmp(pParity, "even") == 0)
+	{
+		pData->parity = eParityEven;
+	}
+
+	pData->stopBits = eStopBits1;
+	if (strcmp(pStopBits, "1.5") == 0)
+	{
+		pData->stopBits = eStopBits15;
+	}
+	else if (strcmp(pStopBits, "2") == 0)
+	{
+		pData->stopBits = eStopBits2;
+	}
+
+	pData->flowControl = eFlowControlNone;
+	if (strcmp(pFlowControl, "software") == 0)
+	{
+		pData->flowControl = eFlowControlSW;
+	} 
+	else if (strcmp(pFlowControl, "hardware") == 0)
+	{
+		pData->flowControl = eFlowControlHW;
+	}
+}
+void ConvertRealSerialSettingsToHost(char* pBaud, char* pDataBits, char* pParity, char* pStopBits, char* pFlowControl, pRealSerialConnectData pData)
+{
+	sprintf(pBaud, "%ld", pData->baudRate);
+	sprintf(pDataBits, "%ld", pData->dataBits);
+
+	switch (pData->parity)
+	{
+	default:
+	case eParityNone:
+		strcpy(pParity, "none");
+		break;
+	case eParityEven:
+		strcpy(pParity, "even");
+		break;
+	case eParityOdd:
+		strcpy(pParity, "odd");
+		break;
+	}
+
+	switch (pData->stopBits)
+	{
+	default:
+	case eStopBits1:
+		strcpy(pStopBits, "1");
+		break;
+	case eStopBits15:
+		strcpy(pStopBits, "1.5");
+		break;
+	case eStopBits2:
+		strcpy(pStopBits, "2");
+		break;
+	}
+	
+	switch (pData->flowControl)
+	{
+	default:
+	case eFlowControlNone:
+		strcpy(pFlowControl, "none");
+		break;
+	case eFlowControlHW:
+		strcpy(pFlowControl, "hardware");
+		break;
+	case eFlowControlSW:
+		strcpy(pFlowControl, "software");
+		break;
+	}
+}
+
+#ifdef _DEBUG
+void OpenLogFile1(char* filename)
+{
+	if (fLog1 == NULL)
+		fLog1 = _fsopen(filename, "at", _SH_DENYNO);
+}
+
+void CloseLogFile1()
+{
+	if (fLog1 != NULL)
+	{
+		fclose(fLog1);
+		fLog1 = NULL;
+	}
+}
+void OpenLogFile2(char* filename)
+{
+	if (fLog2 == NULL)
+		fLog2 = _fsopen(filename, "at", _SH_DENYNO);
+}
+
+void CloseLogFile2()
+{
+	if (fLog2 != NULL)
+	{
+		fclose(fLog2);
+		fLog2 = NULL;
+	}
+}
+void LogTime(FILE* f)
+{
+	SYSTEMTIME sTime;
+	GetLocalTime(&sTime);
+	if (f)
+		fprintf(f, "%02.2d%02.2d-%02.2d:%02.2d:%02.2d.%03.3d: ", sTime.wDay, sTime.wMonth, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);
+}
+#endif
+
+static const char* GetErrorText(unsigned long error)
+{
+	if (error == ERROR_FILE_NOT_FOUND)
+		return "Could not open the device\n";
+
+	else if (error == ERROR_ACCESS_DENIED)
+		return "The device is currently in use\n";
+
+	static char msg[256];
+	FormatMessage(
+		FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
+		NULL,
+		error,
+		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+		(LPTSTR) &msg,
+		sizeof(msg) - 1,
+		NULL);
+
+	return msg;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCAPIConnectionJni.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,213 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class com_nokia_tcf_impl_TCAPIConnection */
+
+#ifndef _Included_com_nokia_tcf_impl_TCAPIConnection
+#define _Included_com_nokia_tcf_impl_TCAPIConnection
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeConnect
+ * Signature: (Ljava/lang/String;[J[Ljava/lang/String;[JLjava/lang/String;[J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeConnect
+  (JNIEnv *, jobject, jstring, jlongArray, jobjectArray, jlongArray, jstring, jlongArray);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeDisconnect
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeDisconnect
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeGetNumberConnections
+ * Signature: ([J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetNumberConnections
+  (JNIEnv *, jobject, jlongArray);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeGetTypeOfConnection
+ * Signature: (J[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetTypeOfConnection
+  (JNIEnv *, jobject, jlong, jobjectArray);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeGetConnectionSettings
+ * Signature: (J[Ljava/lang/String;[J[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetConnectionSettings
+  (JNIEnv *, jobject, jlong, jobjectArray, jlongArray, jobjectArray);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativePollError
+ * Signature: (J[I[Z[J)Z
+ */
+JNIEXPORT jboolean JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativePollError
+  (JNIEnv *, jobject, jlong, jintArray, jbooleanArray, jlongArray);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeGetNumberVersionEntities
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetNumberVersionEntities
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeGetVersion
+ * Signature: (JJ[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetVersion
+  (JNIEnv *, jobject, jlong, jlong, jobjectArray);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativePollInputStream
+ * Signature: (J[J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativePollInputStream
+  (JNIEnv *, jobject, jlong, jlongArray);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativePollInputStream2
+ * Signature: (JJ[J[J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativePollInputStream2
+  (JNIEnv *, jobject, jlong, jlong, jlongArray, jlongArray);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeGetInputStreamMessageBytes
+ * Signature: (JJ[J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeGetInputStreamMessageBytes
+  (JNIEnv *, jobject, jlong, jlong, jlongArray);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeReadInputStream
+ * Signature: (JJ[J[JJ[B)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeReadInputStream
+  (JNIEnv *, jobject, jlong, jlong, jlongArray, jlongArray, jlong, jbyteArray);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeOpenInputStream
+ * Signature: (JLjava/lang/String;JZ)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeOpenInputStream
+  (JNIEnv *, jobject, jlong, jstring, jlong, jboolean);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeCloseInputStream
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeCloseInputStream
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeClearFile
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeClearFile
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeSendMessage
+ * Signature: (J[J[Ljava/lang/String;[B)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeSendMessage
+  (JNIEnv *, jobject, jlong, jlongArray, jobjectArray, jbyteArray);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeSetMessageIds
+ * Signature: (J[B)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeSetMessageIds
+  (JNIEnv *, jobject, jlong, jbyteArray);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeStart
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeStart
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeStop
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeStop
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeTestConnection
+ * Signature: (Ljava/lang/String;[J[Ljava/lang/String;)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeTestConnection__Ljava_lang_String_2_3J_3Ljava_lang_String_2
+  (JNIEnv *, jobject, jstring, jlongArray, jobjectArray);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeTestConnection
+ * Signature: (J)J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeTestConnection__J
+  (JNIEnv *, jobject, jlong);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeStartServer
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeStartServer
+  (JNIEnv *, jobject);
+
+/*
+ * Class:     com_nokia_tcf_impl_TCAPIConnection
+ * Method:    nativeStopServer
+ * Signature: ()J
+ */
+JNIEXPORT jlong JNICALL Java_com_nokia_tcf_impl_TCAPIConnection_nativeStopServer
+  (JNIEnv *, jobject);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCFClient.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,151 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// TCFClient.cpp : Defines the entry point for the DLL application.
+//
+
+#include "stdafx.h"
+#include <stdio.h>
+#include <sys/stat.h>
+#include "ClientManager.h"
+#include "ServerClient.h"
+#include "InputStream.h"
+#include "ErrorMonitorData.h"
+#include "TCDebugLog.h"
+#include <vector>
+
+// process wide data
+CClientManager* gManager;
+#ifdef _DEBUG
+BOOL gDoLogging = FALSE;
+#endif
+
+#ifdef _DEBUG
+static void LogTime(FILE* f);
+#endif
+
+
+BOOL APIENTRY DllMain( HINSTANCE hinstDLL, 
+                       DWORD  fdwReason, 
+                       LPVOID lpReserved
+					 )
+{
+    // Perform actions based on the reason for calling.
+    switch( fdwReason ) 
+    { 
+        case DLL_PROCESS_ATTACH:
+			{
+         // Initialize once for each new process.
+         // Return FALSE to fail DLL load.
+			DWORD currentProcessId = ::GetCurrentProcessId();
+
+			// Create client manager for this process
+#ifdef _DEBUG
+			struct _stat buf;
+			char* dirname = "c:\\tcf";
+			int result = _stat(dirname, &buf);
+			if (result == 0) // exists
+			{
+				gDoLogging = TRUE;
+			}
+			else
+			{
+				gDoLogging = FALSE;
+			}
+
+#endif
+			gManager = new CClientManager(hinstDLL);
+#ifdef _DEBUG
+			if (gDoLogging)
+			{
+				FILE* f = fopen("c:\\tcf\\TCF_DllMainDLL_PROCESS_ATTACH.txt", "at");
+				LogTime(f);
+				fprintf(f,"DLL_PROCESS_ATTACH:\n hinstDLL=%x\n processId=%d\n DllLocation=%s\n DebugLog->m_FileName=%s\n", 
+					hinstDLL, 
+					currentProcessId,
+					gManager->m_DllLocation,
+					gManager->m_DebugLog->m_FileName);
+				fclose(f);
+			}
+#endif
+			}
+            break;
+
+        case DLL_THREAD_ATTACH:
+			{
+         // Do thread-specific initialization.
+			DWORD currentThreadId = ::GetCurrentThreadId();
+#ifdef _DEBUG
+			if (gDoLogging)
+			{
+				FILE* f = fopen("c:\\tcf\\TCF_DllMainDLL_THREAD_ATTACH.txt", "at");
+				LogTime(f);
+				fprintf(f,"DLL_THREAD_ATTACH: hinstDLL=%x currentThreadId=%d\n", hinstDLL, currentThreadId);
+				fclose(f);
+			}
+#endif
+			}
+            break;
+
+        case DLL_THREAD_DETACH:
+			{
+         // Do thread-specific cleanup.
+			DWORD currentThreadId = ::GetCurrentThreadId();
+#ifdef _DEBUG
+			if (gDoLogging)
+			{
+				FILE* f = fopen("c:\\tcf\\TCF_DllMainDLL_THREAD_DETACH.txt", "at");
+				LogTime(f);
+				fprintf(f,"DLL_THREAD_DETTACH: hinstDLL=%x currentThreadId=%d\n", hinstDLL, currentThreadId);
+				fclose(f);
+			}
+#endif
+			}
+            break;
+
+        case DLL_PROCESS_DETACH:
+			{
+         // Perform any necessary cleanup.
+			DWORD currentProcessId = ::GetCurrentProcessId();
+			// delete the client manager for this process
+#ifdef _DEBUG
+			if (gDoLogging)
+			{
+				FILE* f = fopen("c:\\tcf\\TCF_DllMainDLL_PROCESS_DETACH.txt", "at");
+				LogTime(f);
+				fprintf(f,"DLL_PROCESS_DETACH processId=%d\n", currentProcessId);
+				fclose(f);
+			}
+#endif
+			if (gManager)
+			{
+				delete gManager;
+			}
+			}
+            break;
+    }
+    return TRUE;  // Successful DLL_PROCESS_ATTACH.
+}
+#ifdef _DEBUG
+static void LogTime(FILE* f)
+{
+	SYSTEMTIME sTime;
+	GetLocalTime(&sTime);
+	if (f)
+		fprintf(f, "%02.2d%02.2d-%02.2d:%02.2d:%02.2d.%03.3d: ", sTime.wDay, sTime.wMonth, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);
+}
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCFClient.dep	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,118 @@
+# Microsoft Developer Studio Generated Dependency File, included by TCFClient.mak
+
+.\ClientManager.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\ClientManager.h"\
+	".\jdk1.5.0_10\include\jni.h"\
+	".\jdk1.5.0_10\include\win32\jni_md.h"\
+	".\resource.h"\
+	
+
+..\Common\Source\ErrorMonitorData.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\ClientManager.h"\
+	".\jdk1.5.0_10\include\jni.h"\
+	".\jdk1.5.0_10\include\win32\jni_md.h"\
+	
+
+..\Common\Source\InputStream.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\ClientManager.h"\
+	".\jdk1.5.0_10\include\jni.h"\
+	".\jdk1.5.0_10\include\win32\jni_md.h"\
+	
+
+..\Common\Source\mutex.cpp : \
+	"..\Common\Headers\mutex.h"\
+	
+
+..\Common\Source\ServerClient.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\ClientManager.h"\
+	".\jdk1.5.0_10\include\jni.h"\
+	".\jdk1.5.0_10\include\win32\jni_md.h"\
+	
+
+..\Common\Source\shareddata.cpp : \
+	"..\Common\Headers\shareddata.h"\
+	
+
+.\StdAfx.cpp : \
+	".\StdAfx.h"\
+	
+
+.\TCAPIConnectionJni.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\ClientManager.h"\
+	".\jdk1.5.0_10\include\jni.h"\
+	".\jdk1.5.0_10\include\win32\jni_md.h"\
+	".\TCAPIConnectionJni.h"\
+	
+
+..\Common\Source\TCDebugLog.cpp : \
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	
+
+.\TCFClient.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\ClientManager.h"\
+	".\jdk1.5.0_10\include\jni.h"\
+	".\jdk1.5.0_10\include\win32\jni_md.h"\
+	
+
+.\TCFCppApi.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\ClientManager.h"\
+	".\jdk1.5.0_10\include\jni.h"\
+	".\jdk1.5.0_10\include\win32\jni_md.h"\
+	".\TCFCppApi.h"\
+	
+
+.\resource.rc : \
+	".\resource.h"\
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCFClient.dsp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,229 @@
+# Microsoft Developer Studio Project File - Name="TCFClient" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=TCFClient - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFClient.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFClient.mak" CFG="TCFClient - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "TCFClient - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFClient - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "TCFClient - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib shlwapi.lib /nologo /dll /map /machine:I386
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copybinaries Release
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "TCFClient - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR /Yu"stdafx.h" /FD /GZ /c
+# SUBTRACT CPP /X
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib shlwapi.lib /nologo /dll /map /debug /machine:I386 /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copybinaries Debug
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "TCFClient - Win32 Release"
+# Name "TCFClient - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\ClientManager.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\ErrorMonitorData.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\InputStream.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\mutex.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\ServerClient.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\shareddata.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Zp2 /Yc"stdafx.h"
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCAPIConnectionJni.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFClient.cpp
+# ADD CPP /Zp2
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFCppApi.cpp
+# ADD CPP /Zp2
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\ClientManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\ErrorMonitorData.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\InputStream.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\mutex.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\ServerClient.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\shareddata.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCAPIConnectionJni.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\TCConstants.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\TCDebugLog.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\TCErrorConstants.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFCppApi.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\resource.rc
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# End Target
+# End Project
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCFClient.mak	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,564 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on TCFClient.dsp
+!IF "$(CFG)" == ""
+CFG=TCFClient - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to TCFClient - Win32 Debug.
+!ENDIF 
+
+!IF "$(CFG)" != "TCFClient - Win32 Release" && "$(CFG)" != "TCFClient - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFClient.mak" CFG="TCFClient - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "TCFClient - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFClient - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+!ERROR An invalid configuration is specified.
+!ENDIF 
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE 
+NULL=nul
+!ENDIF 
+
+!IF  "$(CFG)" == "TCFClient - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFClient.dll"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\ClientManager.obj"
+	-@erase "$(INTDIR)\ErrorMonitorData.obj"
+	-@erase "$(INTDIR)\InputStream.obj"
+	-@erase "$(INTDIR)\mutex.obj"
+	-@erase "$(INTDIR)\resource.res"
+	-@erase "$(INTDIR)\ServerClient.obj"
+	-@erase "$(INTDIR)\shareddata.obj"
+	-@erase "$(INTDIR)\StdAfx.obj"
+	-@erase "$(INTDIR)\TCAPIConnectionJni.obj"
+	-@erase "$(INTDIR)\TCDebugLog.obj"
+	-@erase "$(INTDIR)\TCFClient.obj"
+	-@erase "$(INTDIR)\TCFClient.pch"
+	-@erase "$(INTDIR)\TCFCppApi.obj"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(OUTDIR)\TCFClient.dll"
+	-@erase "$(OUTDIR)\TCFClient.exp"
+	-@erase "$(OUTDIR)\TCFClient.lib"
+	-@erase "$(OUTDIR)\TCFClient.map"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 
+RSC=rc.exe
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\resource.res" /d "NDEBUG" 
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFClient.bsc" 
+BSC32_SBRS= \
+	
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib shlwapi.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\TCFClient.pdb" /map:"$(INTDIR)\TCFClient.map" /machine:I386 /out:"$(OUTDIR)\TCFClient.dll" /implib:"$(OUTDIR)\TCFClient.lib" 
+LINK32_OBJS= \
+	"$(INTDIR)\ClientManager.obj" \
+	"$(INTDIR)\ErrorMonitorData.obj" \
+	"$(INTDIR)\InputStream.obj" \
+	"$(INTDIR)\mutex.obj" \
+	"$(INTDIR)\ServerClient.obj" \
+	"$(INTDIR)\shareddata.obj" \
+	"$(INTDIR)\StdAfx.obj" \
+	"$(INTDIR)\TCAPIConnectionJni.obj" \
+	"$(INTDIR)\TCDebugLog.obj" \
+	"$(INTDIR)\TCFClient.obj" \
+	"$(INTDIR)\TCFCppApi.obj" \
+	"$(INTDIR)\resource.res"
+
+"$(OUTDIR)\TCFClient.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFClient.dll"
+   copybinaries Release
+	echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF  "$(CFG)" == "TCFClient - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFClient.dll" "$(OUTDIR)\TCFClient.bsc"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\ClientManager.obj"
+	-@erase "$(INTDIR)\ClientManager.sbr"
+	-@erase "$(INTDIR)\ErrorMonitorData.obj"
+	-@erase "$(INTDIR)\ErrorMonitorData.sbr"
+	-@erase "$(INTDIR)\InputStream.obj"
+	-@erase "$(INTDIR)\InputStream.sbr"
+	-@erase "$(INTDIR)\mutex.obj"
+	-@erase "$(INTDIR)\mutex.sbr"
+	-@erase "$(INTDIR)\resource.res"
+	-@erase "$(INTDIR)\ServerClient.obj"
+	-@erase "$(INTDIR)\ServerClient.sbr"
+	-@erase "$(INTDIR)\shareddata.obj"
+	-@erase "$(INTDIR)\shareddata.sbr"
+	-@erase "$(INTDIR)\StdAfx.obj"
+	-@erase "$(INTDIR)\StdAfx.sbr"
+	-@erase "$(INTDIR)\TCAPIConnectionJni.obj"
+	-@erase "$(INTDIR)\TCAPIConnectionJni.sbr"
+	-@erase "$(INTDIR)\TCDebugLog.obj"
+	-@erase "$(INTDIR)\TCDebugLog.sbr"
+	-@erase "$(INTDIR)\TCFClient.obj"
+	-@erase "$(INTDIR)\TCFClient.pch"
+	-@erase "$(INTDIR)\TCFClient.sbr"
+	-@erase "$(INTDIR)\TCFCppApi.obj"
+	-@erase "$(INTDIR)\TCFCppApi.sbr"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(INTDIR)\vc60.pdb"
+	-@erase "$(OUTDIR)\TCFClient.bsc"
+	-@erase "$(OUTDIR)\TCFClient.dll"
+	-@erase "$(OUTDIR)\TCFClient.exp"
+	-@erase "$(OUTDIR)\TCFClient.ilk"
+	-@erase "$(OUTDIR)\TCFClient.lib"
+	-@erase "$(OUTDIR)\TCFClient.map"
+	-@erase "$(OUTDIR)\TCFClient.pdb"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 
+RSC=rc.exe
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\resource.res" /d "_DEBUG" 
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFClient.bsc" 
+BSC32_SBRS= \
+	"$(INTDIR)\ClientManager.sbr" \
+	"$(INTDIR)\ErrorMonitorData.sbr" \
+	"$(INTDIR)\InputStream.sbr" \
+	"$(INTDIR)\mutex.sbr" \
+	"$(INTDIR)\ServerClient.sbr" \
+	"$(INTDIR)\shareddata.sbr" \
+	"$(INTDIR)\StdAfx.sbr" \
+	"$(INTDIR)\TCAPIConnectionJni.sbr" \
+	"$(INTDIR)\TCDebugLog.sbr" \
+	"$(INTDIR)\TCFClient.sbr" \
+	"$(INTDIR)\TCFCppApi.sbr"
+
+"$(OUTDIR)\TCFClient.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+    $(BSC32) @<<
+  $(BSC32_FLAGS) $(BSC32_SBRS)
+<<
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib shlwapi.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\TCFClient.pdb" /map:"$(INTDIR)\TCFClient.map" /debug /machine:I386 /out:"$(OUTDIR)\TCFClient.dll" /implib:"$(OUTDIR)\TCFClient.lib" /pdbtype:sept 
+LINK32_OBJS= \
+	"$(INTDIR)\ClientManager.obj" \
+	"$(INTDIR)\ErrorMonitorData.obj" \
+	"$(INTDIR)\InputStream.obj" \
+	"$(INTDIR)\mutex.obj" \
+	"$(INTDIR)\ServerClient.obj" \
+	"$(INTDIR)\shareddata.obj" \
+	"$(INTDIR)\StdAfx.obj" \
+	"$(INTDIR)\TCAPIConnectionJni.obj" \
+	"$(INTDIR)\TCDebugLog.obj" \
+	"$(INTDIR)\TCFClient.obj" \
+	"$(INTDIR)\TCFCppApi.obj" \
+	"$(INTDIR)\resource.res"
+
+"$(OUTDIR)\TCFClient.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFClient.dll" "$(OUTDIR)\TCFClient.bsc"
+   copybinaries Debug
+	echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF 
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("TCFClient.dep")
+!INCLUDE "TCFClient.dep"
+!ELSE 
+!MESSAGE Warning: cannot find "TCFClient.dep"
+!ENDIF 
+!ENDIF 
+
+
+!IF "$(CFG)" == "TCFClient - Win32 Release" || "$(CFG)" == "TCFClient - Win32 Debug"
+SOURCE=.\ClientManager.cpp
+
+!IF  "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+"$(INTDIR)\ClientManager.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF  "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+"$(INTDIR)\ClientManager.obj"	"$(INTDIR)\ClientManager.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF 
+
+SOURCE=..\Common\Source\ErrorMonitorData.cpp
+
+!IF  "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+"$(INTDIR)\ErrorMonitorData.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF  "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+"$(INTDIR)\ErrorMonitorData.obj"	"$(INTDIR)\ErrorMonitorData.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF 
+
+SOURCE=..\Common\Source\InputStream.cpp
+
+!IF  "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+"$(INTDIR)\InputStream.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF  "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+"$(INTDIR)\InputStream.obj"	"$(INTDIR)\InputStream.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF 
+
+SOURCE=..\Common\Source\mutex.cpp
+
+!IF  "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+"$(INTDIR)\mutex.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF  "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+"$(INTDIR)\mutex.obj"	"$(INTDIR)\mutex.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF 
+
+SOURCE=..\Common\Source\ServerClient.cpp
+
+!IF  "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+"$(INTDIR)\ServerClient.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF  "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+"$(INTDIR)\ServerClient.obj"	"$(INTDIR)\ServerClient.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF 
+
+SOURCE=..\Common\Source\shareddata.cpp
+
+!IF  "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+"$(INTDIR)\shareddata.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF  "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+"$(INTDIR)\shareddata.obj"	"$(INTDIR)\shareddata.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF 
+
+SOURCE=.\StdAfx.cpp
+
+!IF  "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+"$(INTDIR)\StdAfx.obj"	"$(INTDIR)\TCFClient.pch" : $(SOURCE) "$(INTDIR)"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF  "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+"$(INTDIR)\StdAfx.obj"	"$(INTDIR)\StdAfx.sbr"	"$(INTDIR)\TCFClient.pch" : $(SOURCE) "$(INTDIR)"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF 
+
+SOURCE=.\TCAPIConnectionJni.cpp
+
+!IF  "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+"$(INTDIR)\TCAPIConnectionJni.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF  "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+"$(INTDIR)\TCAPIConnectionJni.obj"	"$(INTDIR)\TCAPIConnectionJni.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF 
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+
+!IF  "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+"$(INTDIR)\TCDebugLog.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF  "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+"$(INTDIR)\TCDebugLog.obj"	"$(INTDIR)\TCDebugLog.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF 
+
+SOURCE=.\TCFClient.cpp
+
+!IF  "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+"$(INTDIR)\TCFClient.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF  "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+"$(INTDIR)\TCFClient.obj"	"$(INTDIR)\TCFClient.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF 
+
+SOURCE=.\TCFCppApi.cpp
+
+!IF  "$(CFG)" == "TCFClient - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+"$(INTDIR)\TCFCppApi.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF  "$(CFG)" == "TCFClient - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFClient.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+"$(INTDIR)\TCFCppApi.obj"	"$(INTDIR)\TCFCppApi.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFClient.pch"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF 
+
+SOURCE=.\resource.rc
+
+"$(INTDIR)\resource.res" : $(SOURCE) "$(INTDIR)"
+	$(RSC) $(RSC_PROJ) $(SOURCE)
+
+
+
+!ENDIF 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCFClient.plg	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,83 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: TCFClient - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating command line "rc.exe /l 0x409 /fo"Debug/resource.res" /d "_DEBUG" "C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\resource.rc"" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP3228.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"Debug/" /Fp"Debug/TCFClient.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\ClientManager.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\ErrorMonitorData.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\InputStream.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\ServerClient.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\shareddata.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\TCAPIConnectionJni.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\TCFClient.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\TCFCppApi.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP3228.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP3229.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"Debug/" /Fp"Debug/TCFClient.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP3229.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP322A.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib shlwapi.lib /nologo /dll /incremental:yes /pdb:"Debug/TCFClient.pdb" /map:"Debug/TCFClient.map" /debug /machine:I386 /out:"Debug/TCFClient.dll" /implib:"Debug/TCFClient.lib" /pdbtype:sept 
+.\Debug\ClientManager.obj
+.\Debug\ErrorMonitorData.obj
+.\Debug\InputStream.obj
+.\Debug\mutex.obj
+.\Debug\ServerClient.obj
+.\Debug\shareddata.obj
+.\Debug\StdAfx.obj
+.\Debug\TCAPIConnectionJni.obj
+.\Debug\TCDebugLog.obj
+.\Debug\TCFClient.obj
+.\Debug\TCFCppApi.obj
+.\Debug\resource.res
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP322A.tmp"
+<h3>Output Window</h3>
+Compiling resources...
+Compiling...
+StdAfx.cpp
+Compiling...
+ClientManager.cpp
+ErrorMonitorData.cpp
+InputStream.cpp
+mutex.cpp
+ServerClient.cpp
+shareddata.cpp
+TCAPIConnectionJni.cpp
+TCDebugLog.cpp
+TCFClient.cpp
+TCFCppApi.cpp
+Generating Code...
+Linking...
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP322B.bat" with contents
+[
+@echo off
+copybinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP322B.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFClient.dll - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCFCppApi.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,955 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "stdafx.h"
+#include "TCFCppApi.h"
+#include "ServerClient.h"
+#include "ClientManager.h"
+#include "TCConstants.h"
+#include <vector>
+
+extern CClientManager* gManager;
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+extern char TCDebugMsg[100];
+#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { gManager->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+// for internal testing with 2.x USB TRK define this
+//#define FOR_2X_USB
+
+// client Ids connected for this C++ process
+static std::vector<long> *pcppClientIds = NULL;
+
+static long CheckClient(long id);
+static long CheckConnection(pTCFCppConnectData inConnection);
+static long CheckRealSerialSettings(pTCFCppConnectData inConnection);
+static long CheckMessageOptions(pTCFCppMessageOptions inMessageOptions);
+static long CheckMessageIds(pTCFCppMessageIds inMessageIds);
+static long CheckMessage(pTCFCppMessage inMessage);
+static void ConvertRealSerialSettingsToServer(pTCFCppConnectData inConnection, pRealSerialConnectData pData); 
+static void ConvertRealSerialSettingsToHost(pTCFCppConnectData inConnection, pRealSerialConnectData pData); 
+
+TCF_EXP long TCF_CALL TCFConnect(pTCFCppConnectData inConnection, pTCFCppMessageOptions inMessageOptions, pTCFCppMessageIds inMessageIds, long* outClientId)
+{
+	long ret = TCAPI_ERR_NONE;
+	ServerCommandData cmdrsp;
+	pServerCommandData pCmdrsp = &cmdrsp;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("TCFConnect\n");
+//	if (!gManager->IsServerRunning())
+//		return TCAPI_ERR_COMM_SERVER_RESPONSE_TIMEOUT;
+
+	gManager->m_Server->WaitforServerPipeAccess();
+
+	ret = CheckConnection(inConnection);
+#ifdef FOR_2X_USB
+	inMessageOptions->unWrapFormat = eTCFCppNone;
+#endif
+	if (ret == TCAPI_ERR_NONE)
+	{
+		ret = CheckMessageOptions(inMessageOptions);
+	}
+
+	if (ret == TCAPI_ERR_NONE)
+	{
+		ret = CheckMessageIds(inMessageIds);
+	}
+
+	if (ret == TCAPI_ERR_NONE)
+	{
+		if (strcmp(inConnection->connectType, "tcp") == 0)
+		{
+			char* pAddress = inConnection->tcpSettings.ipAddress;
+			char* pPort = inConnection->tcpSettings.ipPort;
+
+			pCmdrsp->command = eCmdConnect;
+			strncpy(pCmdrsp->connectSettings.connectType, inConnection->connectType, MAX_CONNECTION_TYPE);
+			strncpy(pCmdrsp->connectSettings.tcpSettings.ipAddress, pAddress, MAX_IPADDRESS_SIZE);
+			strncpy(pCmdrsp->connectSettings.tcpSettings.ipPort, pPort, MAX_PORT_SIZE);
+
+			pCmdrsp->connectSettings.retryInterval = inConnection->retryInterval;
+			pCmdrsp->connectSettings.retryTimeout = inConnection->retryTimeout;
+			strncpy(pCmdrsp->connectSettings.decodeFormat, inConnection->decodeFormat, MAX_DECODE_FORMAT);
+			pCmdrsp->clientOptions.unWrapFormat = inMessageOptions->unWrapFormat;
+			pCmdrsp->clientOptions.ostVersion = inMessageOptions->ostVersion;
+		}
+		else if (strcmp(inConnection->connectType, "virtualserial") == 0)
+		{
+			char* pComPort = inConnection->virtualSerialSettings.comPort;
+
+			pCmdrsp->command = eCmdConnect;
+			strncpy(pCmdrsp->connectSettings.connectType, inConnection->connectType, MAX_CONNECTION_TYPE);
+			strncpy(pCmdrsp->connectSettings.virtualSerialSettings.comPort, pComPort, MAX_COMPORT_SIZE);
+
+			pCmdrsp->connectSettings.retryInterval = inConnection->retryInterval;
+			pCmdrsp->connectSettings.retryTimeout = inConnection->retryTimeout;
+			strncpy(pCmdrsp->connectSettings.decodeFormat, inConnection->decodeFormat, MAX_DECODE_FORMAT);
+			pCmdrsp->clientOptions.unWrapFormat = inMessageOptions->unWrapFormat;
+			pCmdrsp->clientOptions.ostVersion = inMessageOptions->ostVersion;
+		}
+		else if (strcmp(inConnection->connectType, "serial") == 0)
+		{
+			char* pComPort = inConnection->realSerialSettings.comPort;
+
+			pCmdrsp->command = eCmdConnect;
+			strncpy(pCmdrsp->connectSettings.connectType, inConnection->connectType, MAX_CONNECTION_TYPE);
+			strncpy(pCmdrsp->connectSettings.realSerialSettings.comPort, pComPort, MAX_COMPORT_SIZE);
+
+			ConvertRealSerialSettingsToServer(inConnection, &pCmdrsp->connectSettings.realSerialSettings);
+
+			pCmdrsp->connectSettings.retryInterval = inConnection->retryInterval;
+			pCmdrsp->connectSettings.retryTimeout = inConnection->retryTimeout;
+			strncpy(pCmdrsp->connectSettings.decodeFormat, inConnection->decodeFormat, MAX_DECODE_FORMAT);
+			pCmdrsp->clientOptions.unWrapFormat = inMessageOptions->unWrapFormat;
+			pCmdrsp->clientOptions.ostVersion = inMessageOptions->ostVersion;
+		}
+		else
+		{
+			// Add other connections here
+		}
+		// send connect command
+		long id = 0;
+
+		if (ret == TCAPI_ERR_NONE)
+		{
+			gManager->m_Server->SendCommand(pCmdrsp);
+			gManager->m_Server->GetResponse(pCmdrsp);
+			if (pCmdrsp->response == eRspError)
+			{
+				ret = pCmdrsp->error;
+				TCDEBUGLOGA1("TCFConnect eCmdConnect: ret = %d\n", ret);
+			}
+			else
+			{
+				id = pCmdrsp->clientId;
+				TCDEBUGLOGA1("TCFConnect eCmdConnect: id = %d\n", id);
+			}
+		}
+		
+		// send message Ids to capture
+		if (ret == TCAPI_ERR_NONE)
+		{
+			pCmdrsp->command = eCmdSetMessageIds;
+			pCmdrsp->clientId = id;
+			pCmdrsp->number = inMessageIds->numberIds;
+			for (int i = 0; i < inMessageIds->numberIds; i++)
+			{
+				pCmdrsp->messageIds[i] = inMessageIds->messageIds[i];
+			}
+
+			gManager->m_Server->SendCommand(pCmdrsp);
+			gManager->m_Server->GetResponse(pCmdrsp);
+			if (pCmdrsp->response == eRspError)
+			{
+				ret = pCmdrsp->error;
+				TCDEBUGLOGA1("TCFConnect eCmdSetMessageIds: ret = %d\n", ret);
+			}
+			else
+			{
+				TCDEBUGLOGA1("TCFConnect eCmdSetMessageIds: ret = %d\n", ret);
+			}
+		}
+
+		// create input stream overflow temp file
+		// create input stream
+		if (ret == TCAPI_ERR_NONE)
+		{
+//			eTCPCppStreamOverflowOption overflowOption = inMessageOptions->streamOverflowOption;
+//			char* pFileName = inMessageOptions->overflowFile;
+			long streamSize = inMessageOptions->inputStreamSize;
+			CInputStream* stream = new CInputStream(NULL, streamSize, eTCPCppStreamOverflowOff, id);
+			stream->CreateStream();
+			gManager->AddInputStream(stream);
+
+			pCmdrsp->command = eCmdOpenStream;
+			pCmdrsp->clientId = id;
+			// TODO: implement message file in the future?
+			pCmdrsp->destinationOptions.destination = eDestinationInputStream;
+			pCmdrsp->destinationOptions.streamSize = streamSize;
+			pCmdrsp->destinationOptions.overFlowToFile = FALSE;//(overflowOption == eTCPCppStreamOverflowOn);
+//			if (pFileName != NULL)
+//			{
+//				strncpy(pCmdrsp->destinationOptions.destinationFile, pFileName, MAX_INPUTSTREAMPATH);
+//			}
+//			else
+			{
+				pCmdrsp->destinationOptions.destinationFile[0] = NULL;
+			}
+			gManager->m_Server->SendCommand(pCmdrsp);
+			gManager->m_Server->GetResponse(pCmdrsp);
+
+			if (pCmdrsp->response == eRspError)
+			{
+				ret = pCmdrsp->error;
+				TCDEBUGLOGA1("TCFConnect eCmdOpenStream: ret = %d\n", ret);
+			}
+			else
+			{
+				TCDEBUGLOGA1("TCFConnect eCmdOpenStream: ret = %d\n", ret);
+			}
+		}
+
+		// create error monitor
+		if (ret == TCAPI_ERR_NONE)
+		{
+			CErrorMonitor* monitor = new CErrorMonitor(id);
+			if (monitor != NULL)
+			{
+				monitor->CreateData();
+				gManager->AddErrorMonitor(monitor);
+			}
+		}
+
+		// start client capture
+		if (ret == TCAPI_ERR_NONE)
+		{
+			pCmdrsp->command = eCmdStart;
+			pCmdrsp->clientId = id;
+			gManager->m_Server->SendCommand(pCmdrsp);
+			gManager->m_Server->GetResponse(pCmdrsp);
+
+			if (pCmdrsp->response == eRspError)
+			{
+				ret = pCmdrsp->error;
+				TCDEBUGLOGA1("TCFConnect eCmdStart: ret = %d\n", ret);
+			}
+			else
+			{
+				TCDEBUGLOGA1("TCFConnect eCmdStart: ret = %d\n", ret);
+			}
+		}
+
+		if (ret == TCAPI_ERR_NONE)
+		{
+			TCDEBUGLOGA1("TCFConnect pcppClientIds: %x\n", pcppClientIds); 
+			if (pcppClientIds == NULL)
+			{
+				pcppClientIds = new std::vector<long>;
+				pcppClientIds->empty();
+			}
+			pcppClientIds->push_back(id);
+			*outClientId = id;
+			TCDEBUGLOGA1("TCFConnect pcppClientIds: size = %d\n", pcppClientIds->size());
+		}
+	}
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+	TCDEBUGLOGA1("TCFConnect return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+	return ret;
+}
+
+
+TCF_EXP long TCF_CALL TCFDisconnect(long inClientId)
+{
+	long ret = TCAPI_ERR_NONE;
+	ServerCommandData cmdrsp;
+	pServerCommandData pCmdrsp = &cmdrsp;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGA1("TCFDisconnect id=%d\n", inClientId);
+
+	gManager->m_Server->WaitforServerPipeAccess();
+	gManager->WaitForErrorMonitorListAccess();
+	gManager->WaitForStreamListAccess();
+
+	// check client ID
+	ret = CheckClient(inClientId);
+	TCDEBUGLOGA1("TCFDisconnect CheckClient: ret = %d\n", ret);
+	
+	// stop client
+	if (ret == TCAPI_ERR_NONE)
+	{
+		pCmdrsp->clientId = inClientId;
+		pCmdrsp->command = eCmdStop;
+		gManager->m_Server->SendCommand(pCmdrsp);
+		gManager->m_Server->GetResponse(pCmdrsp);
+	}
+
+	// close error monitor
+	TCDEBUGLOGS("TCFDisconnect clear error monitor\n");
+	CErrorMonitor *monitor = gManager->FindErrorMonitor(inClientId);
+	if (monitor != NULL)
+	{
+		gManager->RemoveErrorMonitor(monitor);
+		delete monitor;
+	}
+
+	// close input stream
+	TCDEBUGLOGS("TCFDisconnect remove input stream\n");
+	CInputStream* inputStream = gManager->FindInputStream(inClientId);
+	if (inputStream != NULL)
+	{
+		gManager->RemoveInputStream(inputStream);
+		delete inputStream;
+	}
+
+	// send disconnect
+	TCDEBUGLOGS("TCFDisconnect send disconnect\n");
+	if (ret == TCAPI_ERR_NONE)
+	{
+		pCmdrsp->command = eCmdDisconnect;
+		pCmdrsp->clientId = inClientId;
+
+		gManager->m_Server->SendCommand(pCmdrsp);
+		gManager->m_Server->GetResponse(pCmdrsp);
+		if (pCmdrsp->response == eRspError)
+		{
+			ret = pCmdrsp->error;
+		}
+	}
+	
+	TCDEBUGLOGS("TCFDisconnect clear erase id\n");
+	if (pcppClientIds != NULL && ret == TCAPI_ERR_NONE)
+	{
+		std::vector<long>::iterator idIter;
+		for (idIter = pcppClientIds->begin(); idIter != pcppClientIds->end(); idIter++)
+		{
+			if (*idIter == inClientId)
+			{
+				pcppClientIds->erase(idIter);
+				break;
+			}
+		}
+		if (pcppClientIds->size() == 0)
+		{
+			pcppClientIds->empty();
+			delete pcppClientIds;
+			pcppClientIds = NULL;
+		}
+	}
+
+	gManager->ReleaseStreamListAccess();
+	gManager->ReleaseErrorMonitorListAccess();
+
+	TCDEBUGLOGS("TCFDisconnect stop server\n");
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA1("TCFDisconnect return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+	return ret;
+}
+
+TCF_EXP long TCF_CALL TCFGetVersions(long inClientId, long& outNumberVersions, char** outVersions)
+{
+	long ret = TCAPI_ERR_FEATURE_NOT_IMPLEMENTED;
+	outNumberVersions = 0;
+
+	// check client ID
+
+	// get # versions from server
+
+	// get version[i] from server
+
+
+	return ret;
+}
+TCF_EXP long TCF_CALL TCFGetConnections(long& outNumberConnections, pTCFCppConnectData* outConnections)
+{
+	long ret = TCAPI_ERR_FEATURE_NOT_IMPLEMENTED;
+
+	outNumberConnections = 0;
+
+	return ret;
+}
+TCF_EXP long TCF_CALL TCFSendMessage(long inClientId, pTCFCppMessage inMessage, long inLength, BYTE* inData)
+{
+	long ret = TCAPI_ERR_NONE;
+	ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+
+#ifdef FOR_2X_USB
+	inMessage->useMyId = FALSE;
+#endif
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGA1("TCFSendMessage id=%d\n", inClientId);
+
+	// check client ID
+	ret = CheckClient(inClientId);
+	TCDEBUGLOGA1("TCFSendMessage CheckClient: ret=%d\n", ret);
+
+	gManager->m_Server->WaitforServerPipeAccess();
+	// send message to server
+	if (ret == TCAPI_ERR_NONE)
+	{
+		ret = CheckMessage(inMessage);
+		if (ret == TCAPI_ERR_NONE)
+		{
+			pCmdrsp->command = eCmdSendMessage;
+			pCmdrsp->clientId = inClientId;
+			pCmdrsp->encodeOption = (inMessage->encodeFormat == eTCFCppEncodeNone) ? ENCODE_NO_FORMAT : ENCODE_FORMAT;
+			pCmdrsp->useMyId = inMessage->useMyId;
+			pCmdrsp->protocolVersion = inMessage->ostVersion;
+			pCmdrsp->myId = inMessage->myId;
+
+			gManager->m_Server->SendCommand(pCmdrsp, inLength, inData);
+			gManager->m_Server->GetResponse(pCmdrsp);
+
+			if (pCmdrsp->response == eRspError)
+			{
+				ret = pCmdrsp->error;
+				TCDEBUGLOGA1("TCFSendMessage eCmdSendMessage: ret=%d\n", ret);
+			}
+		}
+	}
+
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	TCDEBUGLOGA1("TCFSendMessage return ret=%d\n", ret);
+	TCDEBUGCLOSE();
+	return ret;
+}
+TCF_EXP long TCF_CALL TCFStart(long inClientId)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	// check client Id
+	ret = CheckClient(inClientId);
+	if (ret == TCAPI_ERR_NONE)
+	{
+		gManager->m_Server->WaitforServerPipeAccess();
+
+		ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+
+		pCmdrsp->command = eCmdStart;
+		pCmdrsp->clientId = inClientId;
+
+		gManager->m_Server->SendCommand(pCmdrsp);
+		gManager->m_Server->GetResponse(pCmdrsp);
+
+		if (pCmdrsp->response == eRspError)
+		{
+			ret = pCmdrsp->error;
+		}
+		gManager->m_Server->ReleaseServerPipeAccess();
+
+	}
+
+	return ret;
+}
+
+TCF_EXP long TCF_CALL TCFStop(long inClientId)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	// check client Id
+	ret = CheckClient(inClientId);
+	if (ret == TCAPI_ERR_NONE)
+	{
+		gManager->m_Server->WaitforServerPipeAccess();
+
+		ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+
+		pCmdrsp->command = eCmdStop;
+		pCmdrsp->clientId = inClientId;
+
+		gManager->m_Server->SendCommand(pCmdrsp);
+		gManager->m_Server->GetResponse(pCmdrsp);
+
+		if (pCmdrsp->response == eRspError)
+		{
+			ret = pCmdrsp->error;
+		}
+		gManager->m_Server->ReleaseServerPipeAccess();
+
+	}
+
+	return ret;
+}
+
+TCF_EXP long TCF_CALL TCFSetMessageIds(long inClientId, pTCFCppMessageIds inMessageIds)
+{
+	long ret = TCAPI_ERR_NONE;
+	ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+
+	// check client Id
+	ret = CheckClient(inClientId);
+
+	// check message ids
+	if (ret == TCAPI_ERR_NONE)
+	{
+		ret = CheckMessageIds(inMessageIds);
+	}
+
+	gManager->m_Server->WaitforServerPipeAccess();
+	// check client status
+	if (ret == TCAPI_ERR_NONE)
+	{
+		pCmdrsp->command = eCmdGetClientStatus;
+		pCmdrsp->clientId = inClientId;
+
+		gManager->m_Server->SendCommand(pCmdrsp);
+		gManager->m_Server->GetResponse(pCmdrsp);
+
+		if (pCmdrsp->response == eRspError)
+		{
+			ret = pCmdrsp->error;
+		}
+		else
+		{
+			if (pCmdrsp->clientStatus == eStarted)
+			{
+				ret = TCAPI_ERR_ROUTING_IN_PROGRESS;
+			}
+			else if (pCmdrsp->clientStatus == eUnknownClient)
+			{
+				ret = TCAPI_ERR_MEDIA_NOT_OPEN;
+			}
+		}
+	}
+
+	// set message ids
+	if (ret == TCAPI_ERR_NONE)
+	{
+		pCmdrsp->command = eCmdSetMessageIds;
+		pCmdrsp->clientId = inClientId;
+		pCmdrsp->number = inMessageIds->numberIds;
+		for (int i = 0; i < inMessageIds->numberIds; i++)
+		{
+			pCmdrsp->messageIds[i] = inMessageIds->messageIds[i];
+		}
+		gManager->m_Server->SendCommand(pCmdrsp);
+		gManager->m_Server->GetResponse(pCmdrsp);
+
+		if (pCmdrsp->response == eRspError)
+		{
+			ret = pCmdrsp->error;
+		}
+
+	}
+	gManager->m_Server->ReleaseServerPipeAccess();
+
+	return ret;
+}
+
+TCF_EXP long TCF_CALL TCFPollInputStream(long inClientId, long& outLength)
+{
+	long ret = TCAPI_ERR_NONE;
+	outLength = 0;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGA1("TCFPollInputStream id=%d\n", inClientId);
+
+	gManager->WaitForStreamListAccess();
+
+	// check client ID
+	ret = CheckClient(inClientId);
+	if (ret == TCAPI_ERR_NONE)
+	{
+		// get client's input stream
+		CInputStream* inputStream = gManager->FindInputStream(inClientId);
+
+		if (inputStream != NULL)
+		{
+			outLength = inputStream->GetNextMessageSize();
+		}
+		else
+		{
+			ret = TCAPI_ERR_INPUTSTREAM_CLOSED;
+		}
+	}
+
+	gManager->ReleaseStreamListAccess();
+
+	TCDEBUGLOGA2("TCFPollInputStream return ret=%d outLength=%d\n", ret, outLength);
+	TCDEBUGCLOSE();
+	return ret;
+}
+TCF_EXP long TCF_CALL TCFReadInputStream(long inClientId, pTCFCppMessage outMessage, long& inLength, BYTE* outData)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	if (outData == NULL || inLength <= 0)
+		return ret;
+
+	gManager->WaitForStreamListAccess();
+
+	// check client ID
+	ret = CheckClient(inClientId);
+	if (ret == TCAPI_ERR_NONE)
+	{
+		// get client's input stream
+		CInputStream* inputStream = gManager->FindInputStream(inClientId);
+
+		if (inputStream != NULL)
+		{
+			DWORD length = inputStream->GetNextMessageSize();
+			if (length > inLength) length = inLength;
+			if (length > 0)
+			{
+				inLength = length;
+				inputStream->GetNextMessage(inLength, outData);
+
+			}
+			else
+			{
+				inLength = 0;
+			}
+		}
+		else
+		{
+			ret = TCAPI_ERR_INPUTSTREAM_CLOSED;
+		}
+	}
+
+	gManager->ReleaseStreamListAccess();
+
+	return ret;
+}
+TCF_EXP BOOL TCF_CALL TCFPollError(long inClientId, int* outErrorCode, BOOL* outHasOSErrorCode, long* outOSErrorCode)
+{
+	BOOL foundError = FALSE;
+	gManager->WaitForErrorMonitorListAccess();
+
+	if (gManager->ErrorMonitorListSize() > 0)
+	{
+		CErrorMonitor* errorMonitor = gManager->FindErrorMonitor(inClientId);
+		if (errorMonitor != NULL)
+		{
+			LONG tcfError = TCAPI_ERR_NONE;
+			BOOL osErrorUsed = FALSE;
+			DWORD osError = 0;
+			BOOL found = errorMonitor->GetError(&tcfError, &osErrorUsed, &osError);
+			if (found)
+			{
+				foundError = true;
+				*outErrorCode = (int)tcfError;
+				*outHasOSErrorCode = osErrorUsed;
+				*outOSErrorCode = osError;
+			}
+		}
+	}
+	gManager->ReleaseErrorMonitorListAccess();
+
+	return foundError;
+}
+
+long CheckClient(long id)
+{
+	long ret = TCAPI_ERR_NONE;
+	BOOL found = FALSE;
+
+	if (id <= 0)
+	{
+		ret = TCAPI_ERR_INVALID_HANDLE;
+	}
+	else if (gManager->IsServerRunning() == FALSE)
+	{
+		ret = TCAPI_ERR_MEDIA_NOT_OPEN;
+	}
+	else
+	{
+		if (pcppClientIds == NULL)
+		{
+			ret = TCAPI_ERR_MEDIA_NOT_OPEN;
+		}
+		else
+		{
+			std::vector<long>::iterator idIter;
+			for (idIter = pcppClientIds->begin(); idIter != pcppClientIds->end(); idIter++)
+			{
+				if (*idIter == id)
+				{
+					found = TRUE;
+					break;
+				}
+			}
+			if (!found)
+			{
+				ret = TCAPI_ERR_INVALID_HANDLE;
+			}
+		}
+	}
+
+	return ret;
+}
+long CheckConnection(pTCFCppConnectData inConnection)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	if (inConnection == NULL)
+	{
+		ret = TCAPI_ERR_MISSING_CONNECTION_SPEC;
+	} 
+	else
+	{
+		long retryI = inConnection->retryInterval;
+		long retryT = inConnection->retryTimeout;
+		if (retryI == 0 || retryT == 0 || retryI > retryT)
+			ret = TCAPI_ERR_INVALID_RETRY_PERIODS;
+	}
+	if (ret == TCAPI_ERR_NONE)
+	{
+		if (strcmp(inConnection->connectType, "tcp") == 0)
+		{
+			if (inConnection->tcpSettings.ipAddress == NULL)
+			{
+				ret = TCAPI_ERR_MISSING_MEDIA_DATA;
+			}
+			else if (inConnection->tcpSettings.ipPort == NULL)
+			{
+				ret = TCAPI_ERR_MISSING_MEDIA_DATA;
+			}
+		}
+		else if (strcmp(inConnection->connectType, "virtualserial") == 0)
+		{
+			if (inConnection->virtualSerialSettings.comPort == NULL)
+			{
+				ret = TCAPI_ERR_MISSING_MEDIA_DATA;
+			}
+		}
+		else if (strcmp(inConnection->connectType, "serial") == 0)
+		{
+			ret = CheckRealSerialSettings(inConnection);
+		}
+		else
+		{
+		}
+	}
+
+	return ret;
+}
+
+long CheckRealSerialSettings(pTCFCppConnectData inConnection)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	if (inConnection->realSerialSettings.comPort == NULL)
+	{
+		ret = TCAPI_ERR_MISSING_MEDIA_DATA;
+	}
+	else if (inConnection->realSerialSettings.dataBits < 4 || inConnection->realSerialSettings.dataBits > 8)
+	{
+		ret = TCAPI_ERR_COMM_INVALID_DATABITS;
+	}
+	else if (inConnection->realSerialSettings.baudRate < 110UL || inConnection->realSerialSettings.baudRate > 256000UL)
+	{
+		ret = TCAPI_ERR_MISSING_MEDIA_DATA;
+	}
+	else
+	{
+		switch(inConnection->realSerialSettings.stopBits)
+		{
+		case eTCFCppStopBits1:
+		case eTCFCppStopBits15:
+		case eTCFCppStopBits2:
+			break;
+		default:
+			ret = TCAPI_ERR_COMM_INVALID_STOPBITS;
+			break;
+		}
+
+	}
+	if (ret == TCAPI_ERR_NONE)
+	{
+		switch(inConnection->realSerialSettings.flowControl)
+		{
+		case eTCFCppFlowControlNone:
+		case eTCFCppFlowControlHW:
+		case eTCFCppFlowControlSW:
+			break;
+		default:
+			ret = TCAPI_ERR_COMM_INVALID_FLOWCONTROL;
+			break;
+		}
+	}
+	if (ret == TCAPI_ERR_NONE)
+	{
+		switch(inConnection->realSerialSettings.parity)
+		{
+		case eTCFCppParityNone:
+		case eTCFCppParityOdd:
+		case eTCFCppParityEven:
+			break;
+		default:
+			ret = TCAPI_ERR_COMM_INVALID_PARITY;
+			break;
+ 		}
+	}
+	
+	return ret;
+}
+long CheckMessageOptions(pTCFCppMessageOptions inMessageOptions)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	if (inMessageOptions == NULL)
+	{
+		ret = TCAPI_ERR_MISSING_MESSAGE_OPTIONS;
+	}
+	else
+	{
+		if (ret == TCAPI_ERR_NONE)
+		{
+			if (inMessageOptions->unWrapFormat != eTCFCppNone && 
+				inMessageOptions->unWrapFormat != eTCFCppDeleteHeader)
+			{
+				ret = TCAPI_ERR_INVALID_MESSAGE_UNWRAP_OPTION;
+			}
+		}
+		if (ret == TCAPI_ERR_NONE)
+		{
+			if (inMessageOptions->inputStreamSize <= 0) 
+			{
+				ret = TCAPI_ERR_INVALID_STREAM_BUFFER_SIZE;
+			}
+		}
+	}
+	return ret;
+}
+long CheckMessageIds(pTCFCppMessageIds inMessageIds)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	if (inMessageIds == NULL)
+	{
+		ret = TCAPI_ERR_NO_MESSAGESIDS_REGISTERED;
+	}
+	else if (inMessageIds->numberIds <= 0 || inMessageIds->messageIds == NULL)
+	{
+		ret = TCAPI_ERR_NO_MESSAGESIDS_REGISTERED;
+	}
+	else if (inMessageIds->numberIds > 256)
+	{
+		ret = TCAPI_ERR_MESSAGEID_MAXIMUM;
+	}
+
+	return ret;
+}
+long CheckMessage(pTCFCppMessage inMessage)
+{
+	long ret = TCAPI_ERR_NONE;
+
+	if (inMessage == NULL)
+		return TCAPI_ERR_MISSING_MESSAGE;
+
+	if (inMessage->useMyId)
+	{
+		if ((inMessage->encodeFormat != eTCFCppEncodeNone) && (inMessage->encodeFormat != eTCFCppEncode))
+		{
+			ret = TCAPI_ERR_INVALID_ENCODE_FORMAT;
+		}
+	}
+
+	return ret;
+}
+
+void ConvertRealSerialSettingsToServer(pTCFCppConnectData inConnection, pRealSerialConnectData pData)
+{
+	pData->baudRate = inConnection->realSerialSettings.baudRate;
+	pData->dataBits = inConnection->realSerialSettings.dataBits;
+	switch(inConnection->realSerialSettings.flowControl)
+	{
+	default:
+	case eTCFCppFlowControlNone:
+		pData->flowControl = eFlowControlNone;
+		break;
+	case eTCFCppFlowControlHW:
+		pData->flowControl = eFlowControlHW;
+		break;
+	case eTCFCppFlowControlSW:
+		pData->flowControl = eFlowControlSW;
+		break;
+	}
+	switch(inConnection->realSerialSettings.parity)
+	{
+	default:
+	case eTCFCppParityNone:
+		pData->parity = eParityNone;
+		break;
+	case eTCFCppParityOdd:
+		pData->parity = eParityOdd;
+		break;
+	case eTCFCppParityEven:
+		pData->parity = eParityEven;
+		break;
+	}
+	switch(inConnection->realSerialSettings.stopBits)
+	{
+	default:
+	case eTCFCppStopBits1:
+		pData->stopBits = eStopBits1;
+		break;
+	case eTCFCppStopBits15:
+		pData->stopBits = eStopBits15;
+		break;
+	case eTCFCppStopBits2:
+		pData->stopBits = eStopBits2;
+		break;
+	}
+}
+
+void ConvertRealSerialSettingsToHost(pTCFCppConnectData inConnection, pRealSerialConnectData pData)
+{
+	inConnection->realSerialSettings.baudRate = pData->baudRate;
+	inConnection->realSerialSettings.dataBits = pData->dataBits;
+	switch(pData->flowControl)
+	{
+	default:
+	case eFlowControlNone:
+		inConnection->realSerialSettings.flowControl = eTCFCppFlowControlNone;
+		break;
+	case eFlowControlHW:
+		inConnection->realSerialSettings.flowControl = eTCFCppFlowControlHW;
+		break;
+	case eFlowControlSW:
+		inConnection->realSerialSettings.flowControl = eTCFCppFlowControlSW;
+		break;
+	}
+
+	switch(pData->parity)
+	{
+	default:
+	case eParityNone:
+		inConnection->realSerialSettings.parity = eTCFCppParityNone;
+		break;
+	case eParityEven:
+		inConnection->realSerialSettings.parity = eTCFCppParityEven;
+		break;
+	case eParityOdd:
+		inConnection->realSerialSettings.parity = eTCFCppParityOdd;
+		break;
+	}
+
+	switch(pData->stopBits)
+	{
+	default:
+	case eStopBits1:
+		inConnection->realSerialSettings.stopBits = eTCFCppStopBits1;
+		break;
+	case eStopBits15:
+		inConnection->realSerialSettings.stopBits = eTCFCppStopBits15;
+		break;
+	case eStopBits2:
+		inConnection->realSerialSettings.stopBits = eTCFCppStopBits2;
+		break;
+	}
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/TCFCppApi.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,202 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#ifndef __TCFCPPAPI_H__
+#define __TCFCPPAPI_H__
+
+#include "TCErrorConstants.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef TCFCLIENT_EXPORTS
+#define TCF_EXP __declspec(dllexport)
+#else
+#define TCF_EXP __declspec(dllimport)
+#endif
+
+#define TCF_CALL
+
+// TCP/IP
+#define MAX_IPADDRESS_SIZE (20)
+#define MAX_PORT_SIZE	(6)
+typedef struct tagTCFCppTcpConnectData 
+{
+	char ipAddress[MAX_IPADDRESS_SIZE];	// e.g., "127.0.0.1"
+	char ipPort[MAX_PORT_SIZE];		// e.g., "7654"
+} *pTCFCppTcpConnectData, TCFCppTcpConnectData;
+
+// Virtual Serial (BT and USB over Serial port)
+#define MAX_COMPORT_SIZE	(20)
+typedef struct tagTCFCppVirtualSerialConnectData
+{
+	char comPort[MAX_COMPORT_SIZE];		// only COM port required: e.g. COM0
+} *pTCFCppVirtualSerialConnectData, TCFCppVirtualSerialConnectData;
+
+// Real Serial
+enum eTCFCppFlowControl
+{
+	eTCFCppFlowControlNone,
+	eTCFCppFlowControlHW,
+	eTCFCppFlowControlSW,
+};
+enum eTCFCppStopBits
+{
+	eTCFCppStopBits1,
+	eTCFCppStopBits15,
+	eTCFCppStopBits2,
+};
+enum eTCFCppParity
+{
+	eTCFCppParityNone,
+	eTCFCppParityOdd,
+	eTCFCppParityEven,
+};
+
+typedef struct tagTCFCppRealSerialConnectData
+{
+	eTCFCppFlowControl flowControl;
+	eTCFCppStopBits stopBits;
+	eTCFCppParity parity;
+	DWORD baudRate;
+	DWORD dataBits;
+	char comPort[MAX_COMPORT_SIZE];
+} *pTCFCppRealSerialConnectData, TCFCppRealSerialConnectData;
+
+// Real USB
+#define MAX_USBDEVICE_SIZE	(100)
+typedef struct tagTCFCppUSBConnectData
+{
+	char device[MAX_USBDEVICE_SIZE];
+} *pTCFCppUSBConnectData, TCFCppUSBConnectData;
+
+#define MAX_DECODE_FORMAT		(16)
+#define MAX_CONNECTION_TYPE		(16)
+typedef struct tagTCFCppConnectData 
+{
+	long retryInterval;								// retry interval in seconds when port access is lost
+	long retryTimeout;								// retry timeout in seconds when port access is lost
+	long traceBoxChannel;							// Tracebox parameter
+	char decodeFormat[MAX_DECODE_FORMAT];				// protocol decode format on incoming messages
+	char connectType[MAX_CONNECTION_TYPE];					// connection type
+	TCFCppTcpConnectData tcpSettings;				// TCP/IP
+	TCFCppVirtualSerialConnectData virtualSerialSettings;	// Virtual serial
+	TCFCppRealSerialConnectData realSerialSettings;			// Real Serial
+	TCFCppUSBConnectData usbSettings;				// Real USB
+} *pTCFCppConnectData, TCFCppConnectData;
+
+// Various options for this client
+// Incoming message handling
+enum eTCFCppUnWrapFormat
+{
+	eTCFCppNone,									// return whole message (including protocol)
+	eTCFCppDeleteHeader,							// return only message data (excluding headers)
+};
+// Outgoing message encoding options for this client
+enum eTCFCppEncodeFormat
+{
+	eTCFCppEncodeNone,					// leave message as-is
+	eTCFCppEncode,					// encode message using decode format
+};
+// input stream overflow
+enum eTCPCppStreamOverflowOption
+{
+	eTCPCppStreamOverflowOff,			// no overflow to file
+	eTCPCppStreamOverflowOn,			// overflow to file
+};
+#define MAX_INPUTSTREAMPATH (2048L)
+
+typedef struct tagTCFCppMessageOptions
+{
+	long inputStreamSize;							// input stream size
+//	eTCPCppStreamOverflowOption streamOverflowOption;	// stream overflow option
+//	char overflowFile[MAX_INPUTSTREAMPATH];						// overflow file to use
+	eTCFCppUnWrapFormat unWrapFormat;				// message unwrapping option
+	long ostVersion;								// OST version to use for decoding messages
+} *pTCFCppMessageOptions, TCFCppMessageOptions;
+
+#define MAX_VERSION_STRING		(80)
+#define MAX_MESSAGEIDS			(256)
+typedef struct tagTCFCppMessageIds
+{
+	long numberIds;
+	BYTE messageIds[MAX_MESSAGEIDS];
+} *pTCFCppMessageIds, TCFCppMessageIds;
+
+#define MAX_SENDMESSAGE			(64*1024L+12)
+typedef struct tagTCFCppMessage
+{
+	eTCFCppEncodeFormat encodeFormat;	// encode or do not encode protocol using current protocol
+	long ostVersion;						// OST version to use when above and encodeFormat = "ost"
+	BOOL useMyId;							// format for protocol
+	BYTE myId;								// my message ID to use (if useMyId=true)
+} *pTCFCppMessage, TCFCppMessage;
+
+// APIs
+
+TCF_EXP long TCF_CALL TCFConnect(pTCFCppConnectData inConnection, pTCFCppMessageOptions inMessageOptions, pTCFCppMessageIds inMessageIds, long* outClientId);
+TCF_EXP long TCF_CALL TCFDisconnect(long inClientId);
+TCF_EXP long TCF_CALL TCFGetVersions(long inClientId, long& outNumberVersions, char** outVersions);
+TCF_EXP long TCF_CALL TCFGetConnections(long& outNumberConnections, pTCFCppConnectData* outConnections);
+TCF_EXP long TCF_CALL TCFSendMessage(long inClientId, pTCFCppMessage inMessage, long length, BYTE* data);
+TCF_EXP long TCF_CALL TCFStart(long inClientId);
+TCF_EXP long TCF_CALL TCFStop(long inClientId);
+TCF_EXP long TCF_CALL TCFSetMessageIds(long inClientId, pTCFCppMessageIds inMessageIds);
+TCF_EXP long TCF_CALL TCFPollInputStream(long inClientId, long& outLength);
+TCF_EXP long TCF_CALL TCFReadInputStream(long inClientId, pTCFCppMessage outMessage, long& inLength, BYTE* outData);
+TCF_EXP BOOL TCF_CALL TCFPollError(long inClientId, int* outErrorCode, BOOL* outHasOSErrorCode, long* outOSErrorCode);
+
+
+typedef long (*TCFCONNECT)(pTCFCppConnectData inConnection, pTCFCppMessageOptions inMessageOptions, pTCFCppMessageIds inMessageIds, long* outClientId);
+#define TCFCONNECT_FNNAME	"TCFConnect"
+
+typedef long (*TCFDISCONNECT)(long inClientId);
+#define TCFDISCONNECT_FNNAME	"TCFDisconnect"
+
+typedef long (*TCFGETVERIONS)(long inClientId, long& outNumberVersions, char** outVersions);
+#define TCFGETVERIONS_FNNAME	"TCFGetVersions"
+
+typedef long (*TCFGETCONNECTIONS)(long& outNumberConnections, pTCFCppConnectData* outConnections);
+#define TCFGETCONNECTIONS_FNNAME	"TCFGetConnections"
+
+typedef long (*TCFSENDMESSAGE)(long inClientId, pTCFCppMessage inMessage, long length, BYTE* data);
+#define TCFSENDMESSAGE_FNNAME	"TCFSendMessage"
+
+typedef long (*TCFSTART)(long inClientId);
+#define TCFSTART_FNNAME	"TCFStart"
+
+typedef long (*TCFSTOP)(long inClientId);
+#define TCFSTOP_FNNAME	"TCFStop"
+
+typedef long (*TCFSETMESSAGEIDS)(long inClientId, pTCFCppMessageIds inMessageIds);
+#define TCFSETMESSAGEIDS_FNNAME	"TCFSetMessageIds"
+
+typedef long (*TCFPOLLINPUTSTREAM)(long inClientId, long& outLength);
+#define TCFPOLLINPUTSTREAM_FNNAME	"TCFPollInputStream"
+
+typedef long (*TCFREADINPUTSTREAM)(long inClientId, pTCFCppMessage outMessage, long& inLength, BYTE* outData);
+#define TCFREADINPUTSTREAM_FNNAME	"TCFReadInputStream"
+
+typedef long (*TCFPOLLERROR)(long inClientId, int* outErrorCode, BOOL* outHasOSErrorCode, long* outOSErrorCode);
+#define TCFPOLLERROR_FNNAME	"TCFPollError"
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif // __TCFCPPAPI_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/copyBinaries.cmd	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,5 @@
+echo off
+echo Copy binaries to ..\..\..\os\win32\x86
+copy /V %1\TCFClient.dll ..\..\..\os\win32\x86
+copy /V %1\TCFClient.map ..\..\..\os\win32\x86
+copy /V %1\TCFClient.lib ..\..\..\os\win32\x86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/copyLib.cmd	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,10 @@
+echo off
+echo Copy binaries to ..\..\..\os\win32\x86
+REM copy /V %1\TCFClient.dll ..\..\..\os\win32\x86 already done by project settings
+copy /V %1\TCFClient.map ..\..\..\os\win32\x86
+copy /V %1\TCFClient.lib ..\..\..\os\win32\x86
+echo Copy binaries to ..\..\..\..\com.nokia.tcf\os\win32\x86
+copy /V ..\..\..\os\win32\x86\TCFClient.dll ..\..\..\..\com.nokia.tcf\os\win32\x86
+copy /V  ..\..\..\os\win32\x86\TCFClient.map ..\..\..\..\com.nokia.tcf\os\win32\x86
+copy /V  ..\..\..\os\win32\x86\TCFClient.lib ..\..\..\..\com.nokia.tcf\os\win32\x86
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/javah_build.cmd	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,5 @@
+REM echo off
+
+REM create API 
+attrib -R TCAPIConnectionJni.h
+javah -classpath ..\..\..\..\com.nokia.tcf\bin -o TCAPIConnectionJni.h -jni com.nokia.tcf.impl.TCAPIConnection
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/jdk1.5.0_10/include/jawt.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,278 @@
+/*
+ * @(#)jawt.h	1.10 03/12/19
+ *
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+#ifndef _JAVASOFT_JAWT_H_
+#define _JAVASOFT_JAWT_H_
+
+#include "jni.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * AWT native interface (new in JDK 1.3)
+ *
+ * The AWT native interface allows a native C or C++ application a means
+ * by which to access native structures in AWT.  This is to facilitate moving
+ * legacy C and C++ applications to Java and to target the needs of the
+ * community who, at present, wish to do their own native rendering to canvases
+ * for performance reasons.  Standard extensions such as Java3D also require a
+ * means to access the underlying native data structures of AWT.
+ *
+ * There may be future extensions to this API depending on demand.
+ *
+ * A VM does not have to implement this API in order to pass the JCK.
+ * It is recommended, however, that this API is implemented on VMs that support
+ * standard extensions, such as Java3D.
+ *
+ * Since this is a native API, any program which uses it cannot be considered
+ * 100% pure java.
+ */
+
+/*
+ * AWT Native Drawing Surface (JAWT_DrawingSurface).
+ *
+ * For each platform, there is a native drawing surface structure.  This
+ * platform-specific structure can be found in jawt_md.h.  It is recommended
+ * that additional platforms follow the same model.  It is also recommended
+ * that VMs on Win32 and Solaris support the existing structures in jawt_md.h.
+ *
+ *******************
+ * EXAMPLE OF USAGE:
+ *******************
+ *
+ * In Win32, a programmer wishes to access the HWND of a canvas to perform
+ * native rendering into it.  The programmer has declared the paint() method
+ * for their canvas subclass to be native:
+ *
+ *
+ * MyCanvas.java:
+ *
+ * import java.awt.*;
+ *
+ * public class MyCanvas extends Canvas {
+ *
+ *     static {
+ *         System.loadLibrary("mylib");
+ *     }
+ *
+ *     public native void paint(Graphics g);
+ * }
+ *
+ *
+ * myfile.c:
+ *
+ * #include "jawt_md.h"
+ * #include <assert.h>
+ *
+ * JNIEXPORT void JNICALL
+ * Java_MyCanvas_paint(JNIEnv* env, jobject canvas, jobject graphics)
+ * {
+ *     JAWT awt;
+ *     JAWT_DrawingSurface* ds;
+ *     JAWT_DrawingSurfaceInfo* dsi;
+ *     JAWT_Win32DrawingSurfaceInfo* dsi_win;
+ *     jboolean result;
+ *     jint lock;
+ *
+ *     // Get the AWT
+ *     awt.version = JAWT_VERSION_1_3;
+ *     result = JAWT_GetAWT(env, &awt);
+ *     assert(result != JNI_FALSE);
+ *
+ *     // Get the drawing surface
+ *     ds = awt.GetDrawingSurface(env, canvas);
+ *     assert(ds != NULL);
+ *
+ *     // Lock the drawing surface
+ *     lock = ds->Lock(ds);
+ *     assert((lock & JAWT_LOCK_ERROR) == 0);
+ *
+ *     // Get the drawing surface info
+ *     dsi = ds->GetDrawingSurfaceInfo(ds);
+ *
+ *     // Get the platform-specific drawing info
+ *     dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
+ *
+ *     //////////////////////////////
+ *     // !!! DO PAINTING HERE !!! //
+ *     //////////////////////////////
+ *
+ *     // Free the drawing surface info
+ *     ds->FreeDrawingSurfaceInfo(dsi);
+ *
+ *     // Unlock the drawing surface
+ *     ds->Unlock(ds);
+ *
+ *     // Free the drawing surface
+ *     awt.FreeDrawingSurface(ds);
+ * }
+ *
+ */
+
+/*
+ * JAWT_Rectangle
+ * Structure for a native rectangle.
+ */
+typedef struct jawt_Rectangle {
+    jint x;
+    jint y;
+    jint width;
+    jint height;
+} JAWT_Rectangle;
+
+struct jawt_DrawingSurface;
+
+/*
+ * JAWT_DrawingSurfaceInfo
+ * Structure for containing the underlying drawing information of a component.
+ */
+typedef struct jawt_DrawingSurfaceInfo {
+    /*
+     * Pointer to the platform-specific information.  This can be safely
+     * cast to a JAWT_Win32DrawingSurfaceInfo on Windows or a
+     * JAWT_X11DrawingSurfaceInfo on Solaris.  See jawt_md.h for details.
+     */
+    void* platformInfo;
+    /* Cached pointer to the underlying drawing surface */
+    struct jawt_DrawingSurface* ds;
+    /* Bounding rectangle of the drawing surface */
+    JAWT_Rectangle bounds;
+    /* Number of rectangles in the clip */
+    jint clipSize;
+    /* Clip rectangle array */
+    JAWT_Rectangle* clip;
+} JAWT_DrawingSurfaceInfo;
+
+#define JAWT_LOCK_ERROR                 0x00000001
+#define JAWT_LOCK_CLIP_CHANGED          0x00000002
+#define JAWT_LOCK_BOUNDS_CHANGED        0x00000004
+#define JAWT_LOCK_SURFACE_CHANGED       0x00000008
+
+/*
+ * JAWT_DrawingSurface
+ * Structure for containing the underlying drawing information of a component.
+ * All operations on a JAWT_DrawingSurface MUST be performed from the same
+ * thread as the call to GetDrawingSurface.
+ */
+typedef struct jawt_DrawingSurface {
+    /*
+     * Cached reference to the Java environment of the calling thread.
+     * If Lock(), Unlock(), GetDrawingSurfaceInfo() or
+     * FreeDrawingSurfaceInfo() are called from a different thread,
+     * this data member should be set before calling those functions.
+     */
+    JNIEnv* env;
+    /* Cached reference to the target object */
+    jobject target;
+    /*
+     * Lock the surface of the target component for native rendering.
+     * When finished drawing, the surface must be unlocked with
+     * Unlock().  This function returns a bitmask with one or more of the
+     * following values:
+     *
+     * JAWT_LOCK_ERROR - When an error has occurred and the surface could not
+     * be locked.
+     *
+     * JAWT_LOCK_CLIP_CHANGED - When the clip region has changed.
+     *
+     * JAWT_LOCK_BOUNDS_CHANGED - When the bounds of the surface have changed.
+     *
+     * JAWT_LOCK_SURFACE_CHANGED - When the surface itself has changed
+     */
+    jint (JNICALL *Lock)
+        (struct jawt_DrawingSurface* ds);
+    /*
+     * Get the drawing surface info.
+     * The value returned may be cached, but the values may change if
+     * additional calls to Lock() or Unlock() are made.
+     * Lock() must be called before this can return a valid value.
+     * Returns NULL if an error has occurred.
+     * When finished with the returned value, FreeDrawingSurfaceInfo must be
+     * called.
+     */
+    JAWT_DrawingSurfaceInfo* (JNICALL *GetDrawingSurfaceInfo)
+        (struct jawt_DrawingSurface* ds);
+    /*
+     * Free the drawing surface info.
+     */
+    void (JNICALL *FreeDrawingSurfaceInfo)
+        (JAWT_DrawingSurfaceInfo* dsi);
+    /* 
+     * Unlock the drawing surface of the target component for native rendering.
+     */
+    void (JNICALL *Unlock)
+        (struct jawt_DrawingSurface* ds);
+} JAWT_DrawingSurface;
+
+/*
+ * JAWT
+ * Structure for containing native AWT functions.
+ */
+typedef struct jawt {
+    /*
+     * Version of this structure.  This must always be set before
+     * calling JAWT_GetAWT()
+     */
+    jint version;
+    /*
+     * Return a drawing surface from a target jobject.  This value
+     * may be cached.
+     * Returns NULL if an error has occurred.
+     * Target must be a java.awt.Component (should be a Canvas
+     * or Window for native rendering).
+     * FreeDrawingSurface() must be called when finished with the
+     * returned JAWT_DrawingSurface.
+     */
+    JAWT_DrawingSurface* (JNICALL *GetDrawingSurface)
+        (JNIEnv* env, jobject target);
+    /*
+     * Free the drawing surface allocated in GetDrawingSurface.
+     */
+    void (JNICALL *FreeDrawingSurface)
+        (JAWT_DrawingSurface* ds);
+    /*
+     * Since 1.4
+     * Locks the entire AWT for synchronization purposes
+     */
+    void (JNICALL *Lock)(JNIEnv* env);
+    /*
+     * Since 1.4
+     * Unlocks the entire AWT for synchronization purposes
+     */
+    void (JNICALL *Unlock)(JNIEnv* env);
+    /*
+     * Since 1.4
+     * Returns a reference to a java.awt.Component from a native
+     * platform handle.  On Windows, this corresponds to an HWND;
+     * on Solaris and Linux, this is a Drawable.  For other platforms,
+     * see the appropriate machine-dependent header file for a description.
+     * The reference returned by this function is a local
+     * reference that is only valid in this environment.
+     * This function returns a NULL reference if no component could be
+     * found with matching platform information.
+     */
+    jobject (JNICALL *GetComponent)(JNIEnv* env, void* platformInfo);
+
+} JAWT;
+
+/*
+ * Get the AWT native structure.  This function returns JNI_FALSE if
+ * an error occurs.
+ */
+_JNI_IMPORT_OR_EXPORT_
+jboolean JNICALL JAWT_GetAWT(JNIEnv* env, JAWT* awt);
+
+#define JAWT_VERSION_1_3 0x00010003
+#define JAWT_VERSION_1_4 0x00010004
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* !_JAVASOFT_JAWT_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/jdk1.5.0_10/include/jdwpTransport.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,237 @@
+/*
+ * @(#)jdwpTransport.h	1.7 03/12/19
+ *
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+/*
+ * Java Debug Wire Protocol Transport Service Provider Interface.
+ */
+
+#ifndef JDWPTRANSPORT_H
+#define JDWPTRANSPORT_H
+
+#include "jni.h"
+
+enum {
+    JDWPTRANSPORT_VERSION_1_0 = 0x00010000
+};
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct jdwpTransportNativeInterface_;
+
+struct _jdwpTransportEnv;
+
+#ifdef __cplusplus
+typedef _jdwpTransportEnv jdwpTransportEnv;
+#else
+typedef const struct jdwpTransportNativeInterface_ *jdwpTransportEnv;
+#endif /* __cplusplus */
+
+/*
+ * Errors. Universal errors with JVMTI/JVMDI equivalents keep the
+ * values the same.
+ */
+typedef enum {
+    JDWPTRANSPORT_ERROR_NONE = 0,
+    JDWPTRANSPORT_ERROR_ILLEGAL_ARGUMENT = 103,
+    JDWPTRANSPORT_ERROR_OUT_OF_MEMORY = 110,
+    JDWPTRANSPORT_ERROR_INTERNAL = 113,
+    JDWPTRANSPORT_ERROR_ILLEGAL_STATE = 201,
+    JDWPTRANSPORT_ERROR_IO_ERROR = 202,
+    JDWPTRANSPORT_ERROR_TIMEOUT = 203,
+    JDWPTRANSPORT_ERROR_MSG_NOT_AVAILABLE = 204
+} jdwpTransportError;
+    
+
+/*
+ * Structure to define capabilities
+ */
+typedef struct {
+    unsigned int can_timeout_attach     :1;
+    unsigned int can_timeout_accept     :1;
+    unsigned int can_timeout_handshake  :1;
+    unsigned int reserved3              :1;
+    unsigned int reserved4              :1;
+    unsigned int reserved5              :1;
+    unsigned int reserved6              :1;
+    unsigned int reserved7              :1;
+    unsigned int reserved8              :1;
+    unsigned int reserved9              :1;
+    unsigned int reserved10             :1;
+    unsigned int reserved11             :1;
+    unsigned int reserved12             :1;
+    unsigned int reserved13             :1;
+    unsigned int reserved14		:1;
+    unsigned int reserved15		:1;
+} JDWPTransportCapabilities;
+
+
+/*
+ * Structures to define packet layout.
+ * 
+ * See: http://java.sun.com/j2se/1.5/docs/guide/jpda/jdwp-spec.html
+ */
+
+enum {
+    JDWPTRANSPORT_FLAGS_NONE	 = 0x0,
+    JDWPTRANSPORT_FLAGS_REPLY	 = 0x80
+};
+
+typedef struct {
+    jint len; 
+    jint id;
+    jbyte flags;
+    jbyte cmdSet;
+    jbyte cmd;
+    jbyte *data;
+} jdwpCmdPacket;
+
+typedef struct {
+    jint len;
+    jint id;
+    jbyte flags;
+    jshort errorCode;
+    jbyte *data;
+} jdwpReplyPacket;
+
+typedef struct {
+    union {
+        jdwpCmdPacket cmd;
+        jdwpReplyPacket reply;
+    } type;
+} jdwpPacket;
+
+/*
+ * JDWP functions called by the transport.
+ */
+typedef struct jdwpTransportCallback {
+    void *(*alloc)(jint numBytes);   /* Call this for all allocations */
+    void (*free)(void *buffer);      /* Call this for all deallocations */
+} jdwpTransportCallback;
+
+typedef jint (JNICALL *jdwpTransport_OnLoad_t)(JavaVM *jvm,
+					       jdwpTransportCallback *callback,
+					       jint version,
+                                      	       jdwpTransportEnv** env);
+
+
+
+/* Function Interface */
+
+struct jdwpTransportNativeInterface_ {
+    /*  1 :  RESERVED */
+    void *reserved1;
+
+    /*	2 : Get Capabilities */
+    jdwpTransportError (JNICALL *GetCapabilities)(jdwpTransportEnv* env,
+	 JDWPTransportCapabilities *capabilities_ptr);
+
+    /*  3 : Attach */
+    jdwpTransportError (JNICALL *Attach)(jdwpTransportEnv* env,
+	const char* address,
+	jlong attach_timeout,
+	jlong handshake_timeout);
+
+    /*  4: StartListening */
+    jdwpTransportError (JNICALL *StartListening)(jdwpTransportEnv* env,
+	const char* address, 
+	char** actual_address);
+
+    /*  5: StopListening */
+    jdwpTransportError (JNICALL *StopListening)(jdwpTransportEnv* env);
+
+    /*  6: Accept */
+    jdwpTransportError (JNICALL *Accept)(jdwpTransportEnv* env,
+	jlong accept_timeout, 
+	jlong handshake_timeout);
+
+    /*  7: IsOpen */
+    jboolean (JNICALL *IsOpen)(jdwpTransportEnv* env);
+
+    /*  8: Close */
+    jdwpTransportError (JNICALL *Close)(jdwpTransportEnv* env);
+
+    /*  9: ReadPacket */
+    jdwpTransportError (JNICALL *ReadPacket)(jdwpTransportEnv* env,
+	jdwpPacket *pkt);
+
+    /*  10: Write Packet */
+    jdwpTransportError (JNICALL *WritePacket)(jdwpTransportEnv* env,
+	const jdwpPacket* pkt);
+
+    /*  11:  GetLastError */
+    jdwpTransportError (JNICALL *GetLastError)(jdwpTransportEnv* env,
+	char** error);
+
+};
+
+
+/*
+ * Use inlined functions so that C++ code can use syntax such as
+ *	env->Attach("mymachine:5000", 10*1000, 0);
+ *
+ * rather than using C's :-
+ *
+ *	(*env)->Attach(env, "mymachine:5000", 10*1000, 0);
+ */
+struct _jdwpTransportEnv {
+    const struct jdwpTransportNativeInterface_ *functions;
+#ifdef __cplusplus
+
+    jdwpTransportError GetCapabilities(JDWPTransportCapabilities *capabilities_ptr) {
+	return functions->GetCapabilities(this, capabilities_ptr);
+    }
+
+    jdwpTransportError Attach(const char* address, jlong attach_timeout,
+        	jlong handshake_timeout) {
+	return functions->Attach(this, address, attach_timeout, handshake_timeout);
+    }
+
+    jdwpTransportError StartListening(const char* address,
+        	char** actual_address) {
+	return functions->StartListening(this, address, actual_address);
+    }
+
+    jdwpTransportError StopListening(void) {
+	return functions->StopListening(this);
+    }
+
+    jdwpTransportError Accept(jlong accept_timeout, jlong handshake_timeout) {
+	return functions->Accept(this, accept_timeout, handshake_timeout);
+    }
+
+    jboolean IsOpen(void) {
+        return functions->IsOpen(this);
+    }
+
+    jdwpTransportError Close(void) {
+        return functions->Close(this);
+    }
+
+    jdwpTransportError ReadPacket(jdwpPacket *pkt) {
+	return functions->ReadPacket(this, pkt);
+    }
+
+    jdwpTransportError WritePacket(const jdwpPacket* pkt) {
+	return functions->WritePacket(this, pkt);
+    }
+
+    jdwpTransportError GetLastError(char** error) {
+	return functions->GetLastError(this, error);
+    }
+
+
+#endif /* __cplusplus */
+};
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* JDWPTRANSPORT_H */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/jdk1.5.0_10/include/jni.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,1951 @@
+/*
+ * @(#)jni.h	1.56 03/12/19
+ *
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+/*
+ * We used part of Netscape's Java Runtime Interface (JRI) as the starting
+ * point of our design and implementation.
+ */
+
+/******************************************************************************
+ * Java Runtime Interface
+ * Copyright (c) 1996 Netscape Communications Corporation. All rights reserved.
+ *****************************************************************************/
+
+#ifndef _JAVASOFT_JNI_H_
+#define _JAVASOFT_JNI_H_
+
+#include <stdio.h>
+#include <stdarg.h>
+
+/* jni_md.h contains the machine-dependent typedefs for jbyte, jint
+   and jlong */
+
+#include "jni_md.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * JNI Types
+ */
+
+#ifndef JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H
+
+typedef unsigned char	jboolean;
+typedef unsigned short	jchar;
+typedef short		jshort;
+typedef float		jfloat;
+typedef double		jdouble;
+
+typedef jint            jsize;
+
+#ifdef __cplusplus
+
+class _jobject {};
+class _jclass : public _jobject {};
+class _jthrowable : public _jobject {};
+class _jstring : public _jobject {};
+class _jarray : public _jobject {};
+class _jbooleanArray : public _jarray {};
+class _jbyteArray : public _jarray {};
+class _jcharArray : public _jarray {};
+class _jshortArray : public _jarray {};
+class _jintArray : public _jarray {};
+class _jlongArray : public _jarray {};
+class _jfloatArray : public _jarray {};
+class _jdoubleArray : public _jarray {};
+class _jobjectArray : public _jarray {};
+
+typedef _jobject *jobject;
+typedef _jclass *jclass;
+typedef _jthrowable *jthrowable;
+typedef _jstring *jstring;
+typedef _jarray *jarray;
+typedef _jbooleanArray *jbooleanArray;
+typedef _jbyteArray *jbyteArray;
+typedef _jcharArray *jcharArray;
+typedef _jshortArray *jshortArray;
+typedef _jintArray *jintArray;
+typedef _jlongArray *jlongArray;
+typedef _jfloatArray *jfloatArray;
+typedef _jdoubleArray *jdoubleArray;
+typedef _jobjectArray *jobjectArray;
+
+#else
+
+struct _jobject;
+
+typedef struct _jobject *jobject;
+typedef jobject jclass;
+typedef jobject jthrowable;
+typedef jobject jstring;
+typedef jobject jarray;
+typedef jarray jbooleanArray;
+typedef jarray jbyteArray;
+typedef jarray jcharArray;
+typedef jarray jshortArray;
+typedef jarray jintArray;
+typedef jarray jlongArray;
+typedef jarray jfloatArray;
+typedef jarray jdoubleArray;
+typedef jarray jobjectArray;
+
+#endif
+
+typedef jobject jweak;
+
+typedef union jvalue {
+    jboolean z;
+    jbyte    b;
+    jchar    c;
+    jshort   s;
+    jint     i;
+    jlong    j;
+    jfloat   f;
+    jdouble  d;
+    jobject  l;
+} jvalue;
+
+struct _jfieldID;
+typedef struct _jfieldID *jfieldID;
+
+struct _jmethodID;
+typedef struct _jmethodID *jmethodID;
+
+#endif /* JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H */
+
+/*
+ * jboolean constants
+ */
+
+#define JNI_FALSE 0
+#define JNI_TRUE 1
+
+/*
+ * possible return values for JNI functions.
+ */
+
+#define JNI_OK           0                 /* success */
+#define JNI_ERR          (-1)              /* unknown error */
+#define JNI_EDETACHED    (-2)              /* thread detached from the VM */
+#define JNI_EVERSION     (-3)              /* JNI version error */
+#define JNI_ENOMEM       (-4)              /* not enough memory */
+#define JNI_EEXIST       (-5)              /* VM already created */
+#define JNI_EINVAL       (-6)              /* invalid arguments */
+
+/*
+ * used in ReleaseScalarArrayElements
+ */
+
+#define JNI_COMMIT 1
+#define JNI_ABORT 2
+
+/*
+ * used in RegisterNatives to describe native method name, signature,
+ * and function pointer.
+ */
+
+typedef struct {
+    char *name;
+    char *signature;
+    void *fnPtr;
+} JNINativeMethod;
+
+/*
+ * JNI Native Method Interface.
+ */
+
+struct JNINativeInterface_;
+
+struct JNIEnv_;
+
+#ifdef __cplusplus
+typedef JNIEnv_ JNIEnv;
+#else
+typedef const struct JNINativeInterface_ *JNIEnv;
+#endif
+
+/*
+ * JNI Invocation Interface.
+ */
+
+struct JNIInvokeInterface_;
+
+struct JavaVM_;
+
+#ifdef __cplusplus
+typedef JavaVM_ JavaVM;
+#else
+typedef const struct JNIInvokeInterface_ *JavaVM;
+#endif
+
+struct JNINativeInterface_ {
+    void *reserved0;
+    void *reserved1;
+    void *reserved2;
+
+    void *reserved3;
+    jint (JNICALL *GetVersion)(JNIEnv *env);
+
+    jclass (JNICALL *DefineClass)
+      (JNIEnv *env, const char *name, jobject loader, const jbyte *buf,
+       jsize len);
+    jclass (JNICALL *FindClass)
+      (JNIEnv *env, const char *name);
+
+    jmethodID (JNICALL *FromReflectedMethod)
+      (JNIEnv *env, jobject method);
+    jfieldID (JNICALL *FromReflectedField)
+      (JNIEnv *env, jobject field);
+
+    jobject (JNICALL *ToReflectedMethod)
+      (JNIEnv *env, jclass cls, jmethodID methodID, jboolean isStatic);
+
+    jclass (JNICALL *GetSuperclass)
+      (JNIEnv *env, jclass sub);
+    jboolean (JNICALL *IsAssignableFrom)
+      (JNIEnv *env, jclass sub, jclass sup);
+
+    jobject (JNICALL *ToReflectedField)
+      (JNIEnv *env, jclass cls, jfieldID fieldID, jboolean isStatic);
+
+    jint (JNICALL *Throw)
+      (JNIEnv *env, jthrowable obj);
+    jint (JNICALL *ThrowNew)
+      (JNIEnv *env, jclass clazz, const char *msg);
+    jthrowable (JNICALL *ExceptionOccurred)
+      (JNIEnv *env);
+    void (JNICALL *ExceptionDescribe)
+      (JNIEnv *env);
+    void (JNICALL *ExceptionClear)
+      (JNIEnv *env);
+    void (JNICALL *FatalError)
+      (JNIEnv *env, const char *msg);
+
+    jint (JNICALL *PushLocalFrame)
+      (JNIEnv *env, jint capacity);
+    jobject (JNICALL *PopLocalFrame)
+      (JNIEnv *env, jobject result);
+
+    jobject (JNICALL *NewGlobalRef)
+      (JNIEnv *env, jobject lobj);
+    void (JNICALL *DeleteGlobalRef)
+      (JNIEnv *env, jobject gref);
+    void (JNICALL *DeleteLocalRef)
+      (JNIEnv *env, jobject obj);
+    jboolean (JNICALL *IsSameObject)
+      (JNIEnv *env, jobject obj1, jobject obj2);
+    jobject (JNICALL *NewLocalRef)
+      (JNIEnv *env, jobject ref);
+    jint (JNICALL *EnsureLocalCapacity)
+      (JNIEnv *env, jint capacity);
+
+    jobject (JNICALL *AllocObject)
+      (JNIEnv *env, jclass clazz);
+    jobject (JNICALL *NewObject)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+    jobject (JNICALL *NewObjectV)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+    jobject (JNICALL *NewObjectA)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+    jclass (JNICALL *GetObjectClass)
+      (JNIEnv *env, jobject obj);
+    jboolean (JNICALL *IsInstanceOf)
+      (JNIEnv *env, jobject obj, jclass clazz);
+
+    jmethodID (JNICALL *GetMethodID)
+      (JNIEnv *env, jclass clazz, const char *name, const char *sig);
+
+    jobject (JNICALL *CallObjectMethod)
+      (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+    jobject (JNICALL *CallObjectMethodV)
+      (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+    jobject (JNICALL *CallObjectMethodA)
+      (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
+
+    jboolean (JNICALL *CallBooleanMethod)
+      (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+    jboolean (JNICALL *CallBooleanMethodV)
+      (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+    jboolean (JNICALL *CallBooleanMethodA)
+      (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
+
+    jbyte (JNICALL *CallByteMethod)
+      (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+    jbyte (JNICALL *CallByteMethodV)
+      (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+    jbyte (JNICALL *CallByteMethodA)
+      (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
+
+    jchar (JNICALL *CallCharMethod)
+      (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+    jchar (JNICALL *CallCharMethodV)
+      (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+    jchar (JNICALL *CallCharMethodA)
+      (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
+
+    jshort (JNICALL *CallShortMethod)
+      (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+    jshort (JNICALL *CallShortMethodV)
+      (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+    jshort (JNICALL *CallShortMethodA)
+      (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
+
+    jint (JNICALL *CallIntMethod)
+      (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+    jint (JNICALL *CallIntMethodV)
+      (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+    jint (JNICALL *CallIntMethodA)
+      (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
+
+    jlong (JNICALL *CallLongMethod)
+      (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+    jlong (JNICALL *CallLongMethodV)
+      (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+    jlong (JNICALL *CallLongMethodA)
+      (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
+
+    jfloat (JNICALL *CallFloatMethod)
+      (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+    jfloat (JNICALL *CallFloatMethodV)
+      (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+    jfloat (JNICALL *CallFloatMethodA)
+      (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
+
+    jdouble (JNICALL *CallDoubleMethod)
+      (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+    jdouble (JNICALL *CallDoubleMethodV)
+      (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+    jdouble (JNICALL *CallDoubleMethodA)
+      (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
+
+    void (JNICALL *CallVoidMethod)
+      (JNIEnv *env, jobject obj, jmethodID methodID, ...);
+    void (JNICALL *CallVoidMethodV)
+      (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
+    void (JNICALL *CallVoidMethodA)
+      (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
+
+    jobject (JNICALL *CallNonvirtualObjectMethod)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+    jobject (JNICALL *CallNonvirtualObjectMethodV)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       va_list args);
+    jobject (JNICALL *CallNonvirtualObjectMethodA)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       const jvalue * args);
+
+    jboolean (JNICALL *CallNonvirtualBooleanMethod)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+    jboolean (JNICALL *CallNonvirtualBooleanMethodV)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       va_list args);
+    jboolean (JNICALL *CallNonvirtualBooleanMethodA)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       const jvalue * args);
+
+    jbyte (JNICALL *CallNonvirtualByteMethod)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+    jbyte (JNICALL *CallNonvirtualByteMethodV)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       va_list args);
+    jbyte (JNICALL *CallNonvirtualByteMethodA)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       const jvalue *args);
+
+    jchar (JNICALL *CallNonvirtualCharMethod)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+    jchar (JNICALL *CallNonvirtualCharMethodV)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       va_list args);
+    jchar (JNICALL *CallNonvirtualCharMethodA)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       const jvalue *args);
+
+    jshort (JNICALL *CallNonvirtualShortMethod)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+    jshort (JNICALL *CallNonvirtualShortMethodV)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       va_list args);
+    jshort (JNICALL *CallNonvirtualShortMethodA)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       const jvalue *args);
+
+    jint (JNICALL *CallNonvirtualIntMethod)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+    jint (JNICALL *CallNonvirtualIntMethodV)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       va_list args);
+    jint (JNICALL *CallNonvirtualIntMethodA)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       const jvalue *args);
+
+    jlong (JNICALL *CallNonvirtualLongMethod)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+    jlong (JNICALL *CallNonvirtualLongMethodV)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       va_list args);
+    jlong (JNICALL *CallNonvirtualLongMethodA)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       const jvalue *args);
+
+    jfloat (JNICALL *CallNonvirtualFloatMethod)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+    jfloat (JNICALL *CallNonvirtualFloatMethodV)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       va_list args);
+    jfloat (JNICALL *CallNonvirtualFloatMethodA)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       const jvalue *args);
+
+    jdouble (JNICALL *CallNonvirtualDoubleMethod)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+    jdouble (JNICALL *CallNonvirtualDoubleMethodV)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       va_list args);
+    jdouble (JNICALL *CallNonvirtualDoubleMethodA)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       const jvalue *args);
+
+    void (JNICALL *CallNonvirtualVoidMethod)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
+    void (JNICALL *CallNonvirtualVoidMethodV)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       va_list args);
+    void (JNICALL *CallNonvirtualVoidMethodA)
+      (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
+       const jvalue * args);
+
+    jfieldID (JNICALL *GetFieldID)
+      (JNIEnv *env, jclass clazz, const char *name, const char *sig);
+
+    jobject (JNICALL *GetObjectField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID);
+    jboolean (JNICALL *GetBooleanField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID);
+    jbyte (JNICALL *GetByteField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID);
+    jchar (JNICALL *GetCharField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID);
+    jshort (JNICALL *GetShortField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID);
+    jint (JNICALL *GetIntField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID);
+    jlong (JNICALL *GetLongField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID);
+    jfloat (JNICALL *GetFloatField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID);
+    jdouble (JNICALL *GetDoubleField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID);
+
+    void (JNICALL *SetObjectField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
+    void (JNICALL *SetBooleanField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
+    void (JNICALL *SetByteField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
+    void (JNICALL *SetCharField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
+    void (JNICALL *SetShortField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
+    void (JNICALL *SetIntField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
+    void (JNICALL *SetLongField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
+    void (JNICALL *SetFloatField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
+    void (JNICALL *SetDoubleField)
+      (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
+
+    jmethodID (JNICALL *GetStaticMethodID)
+      (JNIEnv *env, jclass clazz, const char *name, const char *sig);
+
+    jobject (JNICALL *CallStaticObjectMethod)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+    jobject (JNICALL *CallStaticObjectMethodV)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+    jobject (JNICALL *CallStaticObjectMethodA)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+    jboolean (JNICALL *CallStaticBooleanMethod)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+    jboolean (JNICALL *CallStaticBooleanMethodV)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+    jboolean (JNICALL *CallStaticBooleanMethodA)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+    jbyte (JNICALL *CallStaticByteMethod)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+    jbyte (JNICALL *CallStaticByteMethodV)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+    jbyte (JNICALL *CallStaticByteMethodA)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+    jchar (JNICALL *CallStaticCharMethod)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+    jchar (JNICALL *CallStaticCharMethodV)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+    jchar (JNICALL *CallStaticCharMethodA)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+    jshort (JNICALL *CallStaticShortMethod)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+    jshort (JNICALL *CallStaticShortMethodV)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+    jshort (JNICALL *CallStaticShortMethodA)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+    jint (JNICALL *CallStaticIntMethod)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+    jint (JNICALL *CallStaticIntMethodV)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+    jint (JNICALL *CallStaticIntMethodA)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+    jlong (JNICALL *CallStaticLongMethod)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+    jlong (JNICALL *CallStaticLongMethodV)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+    jlong (JNICALL *CallStaticLongMethodA)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+    jfloat (JNICALL *CallStaticFloatMethod)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+    jfloat (JNICALL *CallStaticFloatMethodV)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+    jfloat (JNICALL *CallStaticFloatMethodA)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+    jdouble (JNICALL *CallStaticDoubleMethod)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
+    jdouble (JNICALL *CallStaticDoubleMethodV)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
+    jdouble (JNICALL *CallStaticDoubleMethodA)
+      (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
+
+    void (JNICALL *CallStaticVoidMethod)
+      (JNIEnv *env, jclass cls, jmethodID methodID, ...);
+    void (JNICALL *CallStaticVoidMethodV)
+      (JNIEnv *env, jclass cls, jmethodID methodID, va_list args);
+    void (JNICALL *CallStaticVoidMethodA)
+      (JNIEnv *env, jclass cls, jmethodID methodID, const jvalue * args);
+
+    jfieldID (JNICALL *GetStaticFieldID)
+      (JNIEnv *env, jclass clazz, const char *name, const char *sig);
+    jobject (JNICALL *GetStaticObjectField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID);
+    jboolean (JNICALL *GetStaticBooleanField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID);
+    jbyte (JNICALL *GetStaticByteField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID);
+    jchar (JNICALL *GetStaticCharField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID);
+    jshort (JNICALL *GetStaticShortField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID);
+    jint (JNICALL *GetStaticIntField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID);
+    jlong (JNICALL *GetStaticLongField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID);
+    jfloat (JNICALL *GetStaticFloatField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID);
+    jdouble (JNICALL *GetStaticDoubleField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID);
+
+    void (JNICALL *SetStaticObjectField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value);
+    void (JNICALL *SetStaticBooleanField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value);
+    void (JNICALL *SetStaticByteField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value);
+    void (JNICALL *SetStaticCharField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value);
+    void (JNICALL *SetStaticShortField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value);
+    void (JNICALL *SetStaticIntField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value);
+    void (JNICALL *SetStaticLongField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value);
+    void (JNICALL *SetStaticFloatField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value);
+    void (JNICALL *SetStaticDoubleField)
+      (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value);
+
+    jstring (JNICALL *NewString)
+      (JNIEnv *env, const jchar *unicode, jsize len);
+    jsize (JNICALL *GetStringLength)
+      (JNIEnv *env, jstring str);
+    const jchar *(JNICALL *GetStringChars)
+      (JNIEnv *env, jstring str, jboolean *isCopy);
+    void (JNICALL *ReleaseStringChars)
+      (JNIEnv *env, jstring str, const jchar *chars);
+
+    jstring (JNICALL *NewStringUTF)
+      (JNIEnv *env, const char *utf);
+    jsize (JNICALL *GetStringUTFLength)
+      (JNIEnv *env, jstring str);
+    const char* (JNICALL *GetStringUTFChars)
+      (JNIEnv *env, jstring str, jboolean *isCopy);
+    void (JNICALL *ReleaseStringUTFChars)
+      (JNIEnv *env, jstring str, const char* chars);
+
+
+    jsize (JNICALL *GetArrayLength)
+      (JNIEnv *env, jarray array);
+
+    jobjectArray (JNICALL *NewObjectArray)
+      (JNIEnv *env, jsize len, jclass clazz, jobject init);
+    jobject (JNICALL *GetObjectArrayElement)
+      (JNIEnv *env, jobjectArray array, jsize index);
+    void (JNICALL *SetObjectArrayElement)
+      (JNIEnv *env, jobjectArray array, jsize index, jobject val);
+
+    jbooleanArray (JNICALL *NewBooleanArray)
+      (JNIEnv *env, jsize len);
+    jbyteArray (JNICALL *NewByteArray)
+      (JNIEnv *env, jsize len);
+    jcharArray (JNICALL *NewCharArray)
+      (JNIEnv *env, jsize len);
+    jshortArray (JNICALL *NewShortArray)
+      (JNIEnv *env, jsize len);
+    jintArray (JNICALL *NewIntArray)
+      (JNIEnv *env, jsize len);
+    jlongArray (JNICALL *NewLongArray)
+      (JNIEnv *env, jsize len);
+    jfloatArray (JNICALL *NewFloatArray)
+      (JNIEnv *env, jsize len);
+    jdoubleArray (JNICALL *NewDoubleArray)
+      (JNIEnv *env, jsize len);
+
+    jboolean * (JNICALL *GetBooleanArrayElements)
+      (JNIEnv *env, jbooleanArray array, jboolean *isCopy);
+    jbyte * (JNICALL *GetByteArrayElements)
+      (JNIEnv *env, jbyteArray array, jboolean *isCopy);
+    jchar * (JNICALL *GetCharArrayElements)
+      (JNIEnv *env, jcharArray array, jboolean *isCopy);
+    jshort * (JNICALL *GetShortArrayElements)
+      (JNIEnv *env, jshortArray array, jboolean *isCopy);
+    jint * (JNICALL *GetIntArrayElements)
+      (JNIEnv *env, jintArray array, jboolean *isCopy);
+    jlong * (JNICALL *GetLongArrayElements)
+      (JNIEnv *env, jlongArray array, jboolean *isCopy);
+    jfloat * (JNICALL *GetFloatArrayElements)
+      (JNIEnv *env, jfloatArray array, jboolean *isCopy);
+    jdouble * (JNICALL *GetDoubleArrayElements)
+      (JNIEnv *env, jdoubleArray array, jboolean *isCopy);
+
+    void (JNICALL *ReleaseBooleanArrayElements)
+      (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode);
+    void (JNICALL *ReleaseByteArrayElements)
+      (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode);
+    void (JNICALL *ReleaseCharArrayElements)
+      (JNIEnv *env, jcharArray array, jchar *elems, jint mode);
+    void (JNICALL *ReleaseShortArrayElements)
+      (JNIEnv *env, jshortArray array, jshort *elems, jint mode);
+    void (JNICALL *ReleaseIntArrayElements)
+      (JNIEnv *env, jintArray array, jint *elems, jint mode);
+    void (JNICALL *ReleaseLongArrayElements)
+      (JNIEnv *env, jlongArray array, jlong *elems, jint mode);
+    void (JNICALL *ReleaseFloatArrayElements)
+      (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode);
+    void (JNICALL *ReleaseDoubleArrayElements)
+      (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode);
+
+    void (JNICALL *GetBooleanArrayRegion)
+      (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
+    void (JNICALL *GetByteArrayRegion)
+      (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
+    void (JNICALL *GetCharArrayRegion)
+      (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
+    void (JNICALL *GetShortArrayRegion)
+      (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
+    void (JNICALL *GetIntArrayRegion)
+      (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
+    void (JNICALL *GetLongArrayRegion)
+      (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
+    void (JNICALL *GetFloatArrayRegion)
+      (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
+    void (JNICALL *GetDoubleArrayRegion)
+      (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
+
+    void (JNICALL *SetBooleanArrayRegion)
+      (JNIEnv *env, jbooleanArray array, jsize start, jsize l, const jboolean *buf);
+    void (JNICALL *SetByteArrayRegion)
+      (JNIEnv *env, jbyteArray array, jsize start, jsize len, const jbyte *buf);
+    void (JNICALL *SetCharArrayRegion)
+      (JNIEnv *env, jcharArray array, jsize start, jsize len, const jchar *buf);
+    void (JNICALL *SetShortArrayRegion)
+      (JNIEnv *env, jshortArray array, jsize start, jsize len, const jshort *buf);
+    void (JNICALL *SetIntArrayRegion)
+      (JNIEnv *env, jintArray array, jsize start, jsize len, const jint *buf);
+    void (JNICALL *SetLongArrayRegion)
+      (JNIEnv *env, jlongArray array, jsize start, jsize len, const jlong *buf);
+    void (JNICALL *SetFloatArrayRegion)
+      (JNIEnv *env, jfloatArray array, jsize start, jsize len, const jfloat *buf);
+    void (JNICALL *SetDoubleArrayRegion)
+      (JNIEnv *env, jdoubleArray array, jsize start, jsize len, const jdouble *buf);
+
+    jint (JNICALL *RegisterNatives)
+      (JNIEnv *env, jclass clazz, const JNINativeMethod *methods,
+       jint nMethods);
+    jint (JNICALL *UnregisterNatives)
+      (JNIEnv *env, jclass clazz);
+
+    jint (JNICALL *MonitorEnter)
+      (JNIEnv *env, jobject obj);
+    jint (JNICALL *MonitorExit)
+      (JNIEnv *env, jobject obj);
+
+    jint (JNICALL *GetJavaVM)
+      (JNIEnv *env, JavaVM **vm);
+
+    void (JNICALL *GetStringRegion)
+      (JNIEnv *env, jstring str, jsize start, jsize len, jchar *buf);
+    void (JNICALL *GetStringUTFRegion)
+      (JNIEnv *env, jstring str, jsize start, jsize len, char *buf);
+
+    void * (JNICALL *GetPrimitiveArrayCritical)
+      (JNIEnv *env, jarray array, jboolean *isCopy);
+    void (JNICALL *ReleasePrimitiveArrayCritical)
+      (JNIEnv *env, jarray array, void *carray, jint mode);
+
+    const jchar * (JNICALL *GetStringCritical)
+      (JNIEnv *env, jstring string, jboolean *isCopy);
+    void (JNICALL *ReleaseStringCritical)
+      (JNIEnv *env, jstring string, const jchar *cstring);
+
+    jweak (JNICALL *NewWeakGlobalRef)
+       (JNIEnv *env, jobject obj);
+    void (JNICALL *DeleteWeakGlobalRef)
+       (JNIEnv *env, jweak ref);
+
+    jboolean (JNICALL *ExceptionCheck)
+       (JNIEnv *env);
+
+    jobject (JNICALL *NewDirectByteBuffer)
+       (JNIEnv* env, void* address, jlong capacity);
+    void* (JNICALL *GetDirectBufferAddress)
+       (JNIEnv* env, jobject buf);
+    jlong (JNICALL *GetDirectBufferCapacity)
+       (JNIEnv* env, jobject buf);
+};
+
+/*
+ * We use inlined functions for C++ so that programmers can write:
+ *
+ *    env->FindClass("java/lang/String")
+ *
+ * in C++ rather than:
+ *
+ *    (*env)->FindClass(env, "java/lang/String")
+ *
+ * in C.
+ */
+
+struct JNIEnv_ {
+    const struct JNINativeInterface_ *functions;
+#ifdef __cplusplus
+
+    jint GetVersion() {
+        return functions->GetVersion(this);
+    }
+    jclass DefineClass(const char *name, jobject loader, const jbyte *buf,
+		       jsize len) {
+        return functions->DefineClass(this, name, loader, buf, len);
+    }
+    jclass FindClass(const char *name) {
+        return functions->FindClass(this, name);
+    }
+    jmethodID FromReflectedMethod(jobject method) {
+        return functions->FromReflectedMethod(this,method);
+    }
+    jfieldID FromReflectedField(jobject field) {
+        return functions->FromReflectedField(this,field);
+    }
+
+    jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic) {
+        return functions->ToReflectedMethod(this, cls, methodID, isStatic);
+    }
+
+    jclass GetSuperclass(jclass sub) {
+        return functions->GetSuperclass(this, sub);
+    }
+    jboolean IsAssignableFrom(jclass sub, jclass sup) {
+        return functions->IsAssignableFrom(this, sub, sup);
+    }
+
+    jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic) {
+        return functions->ToReflectedField(this,cls,fieldID,isStatic);
+    }
+
+    jint Throw(jthrowable obj) {
+        return functions->Throw(this, obj);
+    }
+    jint ThrowNew(jclass clazz, const char *msg) {
+        return functions->ThrowNew(this, clazz, msg);
+    }
+    jthrowable ExceptionOccurred() {
+        return functions->ExceptionOccurred(this);
+    }
+    void ExceptionDescribe() {
+        functions->ExceptionDescribe(this);
+    }
+    void ExceptionClear() {
+        functions->ExceptionClear(this);
+    }
+    void FatalError(const char *msg) {
+        functions->FatalError(this, msg);
+    }
+
+    jint PushLocalFrame(jint capacity) {
+        return functions->PushLocalFrame(this,capacity);
+    }
+    jobject PopLocalFrame(jobject result) {
+        return functions->PopLocalFrame(this,result);
+    }
+
+    jobject NewGlobalRef(jobject lobj) {
+        return functions->NewGlobalRef(this,lobj);
+    }
+    void DeleteGlobalRef(jobject gref) {
+        functions->DeleteGlobalRef(this,gref);
+    }
+    void DeleteLocalRef(jobject obj) {
+        functions->DeleteLocalRef(this, obj);
+    }
+
+    jboolean IsSameObject(jobject obj1, jobject obj2) {
+        return functions->IsSameObject(this,obj1,obj2);
+    }
+
+    jobject NewLocalRef(jobject ref) {
+        return functions->NewLocalRef(this,ref);
+    }
+    jint EnsureLocalCapacity(jint capacity) {
+        return functions->EnsureLocalCapacity(this,capacity);
+    }
+
+    jobject AllocObject(jclass clazz) {
+        return functions->AllocObject(this,clazz);
+    }
+    jobject NewObject(jclass clazz, jmethodID methodID, ...) {
+        va_list args;
+	jobject result;
+	va_start(args, methodID);
+        result = functions->NewObjectV(this,clazz,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jobject NewObjectV(jclass clazz, jmethodID methodID,
+		       va_list args) {
+        return functions->NewObjectV(this,clazz,methodID,args);
+    }
+    jobject NewObjectA(jclass clazz, jmethodID methodID,
+		       const jvalue *args) {
+        return functions->NewObjectA(this,clazz,methodID,args);
+    }
+
+    jclass GetObjectClass(jobject obj) {
+        return functions->GetObjectClass(this,obj);
+    }
+    jboolean IsInstanceOf(jobject obj, jclass clazz) {
+        return functions->IsInstanceOf(this,obj,clazz);
+    }
+
+    jmethodID GetMethodID(jclass clazz, const char *name,
+			  const char *sig) {
+        return functions->GetMethodID(this,clazz,name,sig);
+    }
+
+    jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {
+        va_list args;
+	jobject result;
+	va_start(args,methodID);
+	result = functions->CallObjectMethodV(this,obj,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jobject CallObjectMethodV(jobject obj, jmethodID methodID,
+			va_list args) {
+        return functions->CallObjectMethodV(this,obj,methodID,args);
+    }
+    jobject CallObjectMethodA(jobject obj, jmethodID methodID,
+			const jvalue * args) {
+        return functions->CallObjectMethodA(this,obj,methodID,args);
+    }
+
+    jboolean CallBooleanMethod(jobject obj,
+			       jmethodID methodID, ...) {
+        va_list args;
+	jboolean result;
+	va_start(args,methodID);
+	result = functions->CallBooleanMethodV(this,obj,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jboolean CallBooleanMethodV(jobject obj, jmethodID methodID,
+				va_list args) {
+        return functions->CallBooleanMethodV(this,obj,methodID,args);
+    }
+    jboolean CallBooleanMethodA(jobject obj, jmethodID methodID,
+				const jvalue * args) {
+        return functions->CallBooleanMethodA(this,obj,methodID, args);
+    }
+
+    jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {
+        va_list args;
+	jbyte result;
+	va_start(args,methodID);
+	result = functions->CallByteMethodV(this,obj,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jbyte CallByteMethodV(jobject obj, jmethodID methodID,
+			  va_list args) {
+        return functions->CallByteMethodV(this,obj,methodID,args);
+    }
+    jbyte CallByteMethodA(jobject obj, jmethodID methodID,
+			  const jvalue * args) {
+        return functions->CallByteMethodA(this,obj,methodID,args);
+    }
+
+    jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {
+        va_list args;
+	jchar result;
+	va_start(args,methodID);
+	result = functions->CallCharMethodV(this,obj,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jchar CallCharMethodV(jobject obj, jmethodID methodID,
+			  va_list args) {
+        return functions->CallCharMethodV(this,obj,methodID,args);
+    }
+    jchar CallCharMethodA(jobject obj, jmethodID methodID,
+			  const jvalue * args) {
+        return functions->CallCharMethodA(this,obj,methodID,args);
+    }
+
+    jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {
+        va_list args;
+	jshort result;
+	va_start(args,methodID);
+	result = functions->CallShortMethodV(this,obj,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jshort CallShortMethodV(jobject obj, jmethodID methodID,
+			    va_list args) {
+        return functions->CallShortMethodV(this,obj,methodID,args);
+    }
+    jshort CallShortMethodA(jobject obj, jmethodID methodID,
+			    const jvalue * args) {
+        return functions->CallShortMethodA(this,obj,methodID,args);
+    }
+
+    jint CallIntMethod(jobject obj, jmethodID methodID, ...) {
+        va_list args;
+	jint result;
+	va_start(args,methodID);
+	result = functions->CallIntMethodV(this,obj,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jint CallIntMethodV(jobject obj, jmethodID methodID,
+			va_list args) {
+        return functions->CallIntMethodV(this,obj,methodID,args);
+    }
+    jint CallIntMethodA(jobject obj, jmethodID methodID,
+			const jvalue * args) {
+        return functions->CallIntMethodA(this,obj,methodID,args);
+    }
+
+    jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {
+        va_list args;
+	jlong result;
+	va_start(args,methodID);
+	result = functions->CallLongMethodV(this,obj,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jlong CallLongMethodV(jobject obj, jmethodID methodID,
+			  va_list args) {
+        return functions->CallLongMethodV(this,obj,methodID,args);
+    }
+    jlong CallLongMethodA(jobject obj, jmethodID methodID,
+			  const jvalue * args) {
+        return functions->CallLongMethodA(this,obj,methodID,args);
+    }
+
+    jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {
+        va_list args;
+	jfloat result;
+	va_start(args,methodID);
+	result = functions->CallFloatMethodV(this,obj,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jfloat CallFloatMethodV(jobject obj, jmethodID methodID,
+			    va_list args) {
+        return functions->CallFloatMethodV(this,obj,methodID,args);
+    }
+    jfloat CallFloatMethodA(jobject obj, jmethodID methodID,
+			    const jvalue * args) {
+        return functions->CallFloatMethodA(this,obj,methodID,args);
+    }
+
+    jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {
+        va_list args;
+	jdouble result;
+	va_start(args,methodID);
+	result = functions->CallDoubleMethodV(this,obj,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jdouble CallDoubleMethodV(jobject obj, jmethodID methodID,
+			va_list args) {
+        return functions->CallDoubleMethodV(this,obj,methodID,args);
+    }
+    jdouble CallDoubleMethodA(jobject obj, jmethodID methodID,
+			const jvalue * args) {
+        return functions->CallDoubleMethodA(this,obj,methodID,args);
+    }
+
+    void CallVoidMethod(jobject obj, jmethodID methodID, ...) {
+        va_list args;
+	va_start(args,methodID);
+	functions->CallVoidMethodV(this,obj,methodID,args);
+	va_end(args);
+    }
+    void CallVoidMethodV(jobject obj, jmethodID methodID,
+			 va_list args) {
+        functions->CallVoidMethodV(this,obj,methodID,args);
+    }
+    void CallVoidMethodA(jobject obj, jmethodID methodID,
+			 const jvalue * args) {
+        functions->CallVoidMethodA(this,obj,methodID,args);
+    }
+
+    jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz,
+				       jmethodID methodID, ...) {
+        va_list args;
+	jobject result;
+	va_start(args,methodID);
+	result = functions->CallNonvirtualObjectMethodV(this,obj,clazz,
+							methodID,args);
+	va_end(args);
+	return result;
+    }
+    jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz,
+					jmethodID methodID, va_list args) {
+        return functions->CallNonvirtualObjectMethodV(this,obj,clazz,
+						      methodID,args);
+    }
+    jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz,
+					jmethodID methodID, const jvalue * args) {
+        return functions->CallNonvirtualObjectMethodA(this,obj,clazz,
+						      methodID,args);
+    }
+
+    jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz,
+					 jmethodID methodID, ...) {
+        va_list args;
+	jboolean result;
+	va_start(args,methodID);
+	result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
+							 methodID,args);
+	va_end(args);
+	return result;
+    }
+    jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz,
+					  jmethodID methodID, va_list args) {
+        return functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
+						       methodID,args);
+    }
+    jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz,
+					  jmethodID methodID, const jvalue * args) {
+        return functions->CallNonvirtualBooleanMethodA(this,obj,clazz,
+						       methodID, args);
+    }
+
+    jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz,
+				   jmethodID methodID, ...) {
+        va_list args;
+	jbyte result;
+	va_start(args,methodID);
+	result = functions->CallNonvirtualByteMethodV(this,obj,clazz,
+						      methodID,args);
+	va_end(args);
+	return result;
+    }
+    jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz,
+				    jmethodID methodID, va_list args) {
+        return functions->CallNonvirtualByteMethodV(this,obj,clazz,
+						    methodID,args);
+    }
+    jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz,
+				    jmethodID methodID, const jvalue * args) {
+        return functions->CallNonvirtualByteMethodA(this,obj,clazz,
+						    methodID,args);
+    }
+
+    jchar CallNonvirtualCharMethod(jobject obj, jclass clazz,
+				   jmethodID methodID, ...) {
+        va_list args;
+	jchar result;
+	va_start(args,methodID);
+	result = functions->CallNonvirtualCharMethodV(this,obj,clazz,
+						      methodID,args);
+	va_end(args);
+	return result;
+    }
+    jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz,
+				    jmethodID methodID, va_list args) {
+        return functions->CallNonvirtualCharMethodV(this,obj,clazz,
+						    methodID,args);
+    }
+    jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz,
+				    jmethodID methodID, const jvalue * args) {
+        return functions->CallNonvirtualCharMethodA(this,obj,clazz,
+						    methodID,args);
+    }
+
+    jshort CallNonvirtualShortMethod(jobject obj, jclass clazz,
+				     jmethodID methodID, ...) {
+        va_list args;
+	jshort result;
+	va_start(args,methodID);
+	result = functions->CallNonvirtualShortMethodV(this,obj,clazz,
+						       methodID,args);
+	va_end(args);
+	return result;
+    }
+    jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz,
+				      jmethodID methodID, va_list args) {
+        return functions->CallNonvirtualShortMethodV(this,obj,clazz,
+						     methodID,args);
+    }
+    jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,
+				      jmethodID methodID, const jvalue * args) {
+        return functions->CallNonvirtualShortMethodA(this,obj,clazz,
+						     methodID,args);
+    }
+
+    jint CallNonvirtualIntMethod(jobject obj, jclass clazz,
+				 jmethodID methodID, ...) {
+        va_list args;
+	jint result;
+	va_start(args,methodID);
+	result = functions->CallNonvirtualIntMethodV(this,obj,clazz,
+						     methodID,args);
+	va_end(args);
+	return result;
+    }
+    jint CallNonvirtualIntMethodV(jobject obj, jclass clazz,
+				  jmethodID methodID, va_list args) {
+        return functions->CallNonvirtualIntMethodV(this,obj,clazz,
+						   methodID,args);
+    }
+    jint CallNonvirtualIntMethodA(jobject obj, jclass clazz,
+				  jmethodID methodID, const jvalue * args) {
+        return functions->CallNonvirtualIntMethodA(this,obj,clazz,
+						   methodID,args);
+    }
+
+    jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,
+				   jmethodID methodID, ...) {
+        va_list args;
+	jlong result;
+	va_start(args,methodID);
+	result = functions->CallNonvirtualLongMethodV(this,obj,clazz,
+						      methodID,args);
+	va_end(args);
+	return result;
+    }
+    jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,
+				    jmethodID methodID, va_list args) {
+        return functions->CallNonvirtualLongMethodV(this,obj,clazz,
+						    methodID,args);
+    }
+    jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz,
+				    jmethodID methodID, const jvalue * args) {
+        return functions->CallNonvirtualLongMethodA(this,obj,clazz,
+						    methodID,args);
+    }
+
+    jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz,
+				     jmethodID methodID, ...) {
+        va_list args;
+	jfloat result;
+	va_start(args,methodID);
+	result = functions->CallNonvirtualFloatMethodV(this,obj,clazz,
+						       methodID,args);
+	va_end(args);
+	return result;
+    }
+    jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,
+				      jmethodID methodID,
+				      va_list args) {
+        return functions->CallNonvirtualFloatMethodV(this,obj,clazz,
+						     methodID,args);
+    }
+    jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz,
+				      jmethodID methodID,
+				      const jvalue * args) {
+        return functions->CallNonvirtualFloatMethodA(this,obj,clazz,
+						     methodID,args);
+    }
+
+    jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,
+				       jmethodID methodID, ...) {
+        va_list args;
+	jdouble result;
+	va_start(args,methodID);
+	result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
+							methodID,args);
+	va_end(args);
+	return result;
+    }
+    jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,
+					jmethodID methodID,
+					va_list args) {
+        return functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
+						      methodID,args);
+    }
+    jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz,
+					jmethodID methodID,
+					const jvalue * args) {
+        return functions->CallNonvirtualDoubleMethodA(this,obj,clazz,
+						      methodID,args);
+    }
+
+    void CallNonvirtualVoidMethod(jobject obj, jclass clazz,
+				  jmethodID methodID, ...) {
+        va_list args;
+	va_start(args,methodID);
+	functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
+	va_end(args);
+    }
+    void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,
+				   jmethodID methodID,
+				   va_list args) {
+        functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
+    }
+    void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,
+				   jmethodID methodID,
+				   const jvalue * args) {
+        functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args);
+    }
+
+    jfieldID GetFieldID(jclass clazz, const char *name,
+			const char *sig) {
+        return functions->GetFieldID(this,clazz,name,sig);
+    }
+
+    jobject GetObjectField(jobject obj, jfieldID fieldID) {
+        return functions->GetObjectField(this,obj,fieldID);
+    }
+    jboolean GetBooleanField(jobject obj, jfieldID fieldID) {
+        return functions->GetBooleanField(this,obj,fieldID);
+    }
+    jbyte GetByteField(jobject obj, jfieldID fieldID) {
+        return functions->GetByteField(this,obj,fieldID);
+    }
+    jchar GetCharField(jobject obj, jfieldID fieldID) {
+        return functions->GetCharField(this,obj,fieldID);
+    }
+    jshort GetShortField(jobject obj, jfieldID fieldID) {
+        return functions->GetShortField(this,obj,fieldID);
+    }
+    jint GetIntField(jobject obj, jfieldID fieldID) {
+        return functions->GetIntField(this,obj,fieldID);
+    }
+    jlong GetLongField(jobject obj, jfieldID fieldID) {
+        return functions->GetLongField(this,obj,fieldID);
+    }
+    jfloat GetFloatField(jobject obj, jfieldID fieldID) {
+        return functions->GetFloatField(this,obj,fieldID);
+    }
+    jdouble GetDoubleField(jobject obj, jfieldID fieldID) {
+        return functions->GetDoubleField(this,obj,fieldID);
+    }
+
+    void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {
+        functions->SetObjectField(this,obj,fieldID,val);
+    }
+    void SetBooleanField(jobject obj, jfieldID fieldID,
+			 jboolean val) {
+        functions->SetBooleanField(this,obj,fieldID,val);
+    }
+    void SetByteField(jobject obj, jfieldID fieldID,
+		      jbyte val) {
+        functions->SetByteField(this,obj,fieldID,val);
+    }
+    void SetCharField(jobject obj, jfieldID fieldID,
+		      jchar val) {
+        functions->SetCharField(this,obj,fieldID,val);
+    }
+    void SetShortField(jobject obj, jfieldID fieldID,
+		       jshort val) {
+        functions->SetShortField(this,obj,fieldID,val);
+    }
+    void SetIntField(jobject obj, jfieldID fieldID,
+		     jint val) {
+        functions->SetIntField(this,obj,fieldID,val);
+    }
+    void SetLongField(jobject obj, jfieldID fieldID,
+		      jlong val) {
+        functions->SetLongField(this,obj,fieldID,val);
+    }
+    void SetFloatField(jobject obj, jfieldID fieldID,
+		       jfloat val) {
+        functions->SetFloatField(this,obj,fieldID,val);
+    }
+    void SetDoubleField(jobject obj, jfieldID fieldID,
+			jdouble val) {
+        functions->SetDoubleField(this,obj,fieldID,val);
+    }
+
+    jmethodID GetStaticMethodID(jclass clazz, const char *name,
+				const char *sig) {
+        return functions->GetStaticMethodID(this,clazz,name,sig);
+    }
+
+    jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID,
+			     ...) {
+        va_list args;
+	jobject result;
+	va_start(args,methodID);
+	result = functions->CallStaticObjectMethodV(this,clazz,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID,
+			      va_list args) {
+        return functions->CallStaticObjectMethodV(this,clazz,methodID,args);
+    }
+    jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID,
+			      const jvalue *args) {
+        return functions->CallStaticObjectMethodA(this,clazz,methodID,args);
+    }
+
+    jboolean CallStaticBooleanMethod(jclass clazz,
+				     jmethodID methodID, ...) {
+        va_list args;
+	jboolean result;
+	va_start(args,methodID);
+	result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jboolean CallStaticBooleanMethodV(jclass clazz,
+				      jmethodID methodID, va_list args) {
+        return functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
+    }
+    jboolean CallStaticBooleanMethodA(jclass clazz,
+				      jmethodID methodID, const jvalue *args) {
+        return functions->CallStaticBooleanMethodA(this,clazz,methodID,args);
+    }
+
+    jbyte CallStaticByteMethod(jclass clazz,
+			       jmethodID methodID, ...) {
+        va_list args;
+	jbyte result;
+	va_start(args,methodID);
+	result = functions->CallStaticByteMethodV(this,clazz,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jbyte CallStaticByteMethodV(jclass clazz,
+				jmethodID methodID, va_list args) {
+        return functions->CallStaticByteMethodV(this,clazz,methodID,args);
+    }
+    jbyte CallStaticByteMethodA(jclass clazz,
+				jmethodID methodID, const jvalue *args) {
+        return functions->CallStaticByteMethodA(this,clazz,methodID,args);
+    }
+
+    jchar CallStaticCharMethod(jclass clazz,
+			       jmethodID methodID, ...) {
+        va_list args;
+	jchar result;
+	va_start(args,methodID);
+	result = functions->CallStaticCharMethodV(this,clazz,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jchar CallStaticCharMethodV(jclass clazz,
+				jmethodID methodID, va_list args) {
+        return functions->CallStaticCharMethodV(this,clazz,methodID,args);
+    }
+    jchar CallStaticCharMethodA(jclass clazz,
+				jmethodID methodID, const jvalue *args) {
+        return functions->CallStaticCharMethodA(this,clazz,methodID,args);
+    }
+
+    jshort CallStaticShortMethod(jclass clazz,
+				 jmethodID methodID, ...) {
+        va_list args;
+	jshort result;
+	va_start(args,methodID);
+	result = functions->CallStaticShortMethodV(this,clazz,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jshort CallStaticShortMethodV(jclass clazz,
+				  jmethodID methodID, va_list args) {
+        return functions->CallStaticShortMethodV(this,clazz,methodID,args);
+    }
+    jshort CallStaticShortMethodA(jclass clazz,
+				  jmethodID methodID, const jvalue *args) {
+        return functions->CallStaticShortMethodA(this,clazz,methodID,args);
+    }
+
+    jint CallStaticIntMethod(jclass clazz,
+			     jmethodID methodID, ...) {
+        va_list args;
+	jint result;
+	va_start(args,methodID);
+	result = functions->CallStaticIntMethodV(this,clazz,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jint CallStaticIntMethodV(jclass clazz,
+			      jmethodID methodID, va_list args) {
+        return functions->CallStaticIntMethodV(this,clazz,methodID,args);
+    }
+    jint CallStaticIntMethodA(jclass clazz,
+			      jmethodID methodID, const jvalue *args) {
+        return functions->CallStaticIntMethodA(this,clazz,methodID,args);
+    }
+
+    jlong CallStaticLongMethod(jclass clazz,
+			       jmethodID methodID, ...) {
+        va_list args;
+	jlong result;
+	va_start(args,methodID);
+	result = functions->CallStaticLongMethodV(this,clazz,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jlong CallStaticLongMethodV(jclass clazz,
+				jmethodID methodID, va_list args) {
+        return functions->CallStaticLongMethodV(this,clazz,methodID,args);
+    }
+    jlong CallStaticLongMethodA(jclass clazz,
+				jmethodID methodID, const jvalue *args) {
+        return functions->CallStaticLongMethodA(this,clazz,methodID,args);
+    }
+
+    jfloat CallStaticFloatMethod(jclass clazz,
+				 jmethodID methodID, ...) {
+        va_list args;
+	jfloat result;
+	va_start(args,methodID);
+	result = functions->CallStaticFloatMethodV(this,clazz,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jfloat CallStaticFloatMethodV(jclass clazz,
+				  jmethodID methodID, va_list args) {
+        return functions->CallStaticFloatMethodV(this,clazz,methodID,args);
+    }
+    jfloat CallStaticFloatMethodA(jclass clazz,
+				  jmethodID methodID, const jvalue *args) {
+        return functions->CallStaticFloatMethodA(this,clazz,methodID,args);
+    }
+
+    jdouble CallStaticDoubleMethod(jclass clazz,
+				   jmethodID methodID, ...) {
+        va_list args;
+	jdouble result;
+	va_start(args,methodID);
+	result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
+	va_end(args);
+	return result;
+    }
+    jdouble CallStaticDoubleMethodV(jclass clazz,
+				    jmethodID methodID, va_list args) {
+        return functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
+    }
+    jdouble CallStaticDoubleMethodA(jclass clazz,
+				    jmethodID methodID, const jvalue *args) {
+        return functions->CallStaticDoubleMethodA(this,clazz,methodID,args);
+    }
+
+    void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {
+        va_list args;
+	va_start(args,methodID);
+	functions->CallStaticVoidMethodV(this,cls,methodID,args);
+	va_end(args);
+    }
+    void CallStaticVoidMethodV(jclass cls, jmethodID methodID,
+			       va_list args) {
+        functions->CallStaticVoidMethodV(this,cls,methodID,args);
+    }
+    void CallStaticVoidMethodA(jclass cls, jmethodID methodID,
+			       const jvalue * args) {
+        functions->CallStaticVoidMethodA(this,cls,methodID,args);
+    }
+
+    jfieldID GetStaticFieldID(jclass clazz, const char *name,
+			      const char *sig) {
+        return functions->GetStaticFieldID(this,clazz,name,sig);
+    }
+    jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {
+        return functions->GetStaticObjectField(this,clazz,fieldID);
+    }
+    jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {
+        return functions->GetStaticBooleanField(this,clazz,fieldID);
+    }
+    jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {
+        return functions->GetStaticByteField(this,clazz,fieldID);
+    }
+    jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {
+        return functions->GetStaticCharField(this,clazz,fieldID);
+    }
+    jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {
+        return functions->GetStaticShortField(this,clazz,fieldID);
+    }
+    jint GetStaticIntField(jclass clazz, jfieldID fieldID) {
+        return functions->GetStaticIntField(this,clazz,fieldID);
+    }
+    jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {
+        return functions->GetStaticLongField(this,clazz,fieldID);
+    }
+    jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {
+        return functions->GetStaticFloatField(this,clazz,fieldID);
+    }
+    jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {
+        return functions->GetStaticDoubleField(this,clazz,fieldID);
+    }
+
+    void SetStaticObjectField(jclass clazz, jfieldID fieldID,
+			jobject value) {
+      functions->SetStaticObjectField(this,clazz,fieldID,value);
+    }
+    void SetStaticBooleanField(jclass clazz, jfieldID fieldID,
+			jboolean value) {
+      functions->SetStaticBooleanField(this,clazz,fieldID,value);
+    }
+    void SetStaticByteField(jclass clazz, jfieldID fieldID,
+			jbyte value) {
+      functions->SetStaticByteField(this,clazz,fieldID,value);
+    }
+    void SetStaticCharField(jclass clazz, jfieldID fieldID,
+			jchar value) {
+      functions->SetStaticCharField(this,clazz,fieldID,value);
+    }
+    void SetStaticShortField(jclass clazz, jfieldID fieldID,
+			jshort value) {
+      functions->SetStaticShortField(this,clazz,fieldID,value);
+    }
+    void SetStaticIntField(jclass clazz, jfieldID fieldID,
+			jint value) {
+      functions->SetStaticIntField(this,clazz,fieldID,value);
+    }
+    void SetStaticLongField(jclass clazz, jfieldID fieldID,
+			jlong value) {
+      functions->SetStaticLongField(this,clazz,fieldID,value);
+    }
+    void SetStaticFloatField(jclass clazz, jfieldID fieldID,
+			jfloat value) {
+      functions->SetStaticFloatField(this,clazz,fieldID,value);
+    }
+    void SetStaticDoubleField(jclass clazz, jfieldID fieldID,
+			jdouble value) {
+      functions->SetStaticDoubleField(this,clazz,fieldID,value);
+    }
+
+    jstring NewString(const jchar *unicode, jsize len) {
+        return functions->NewString(this,unicode,len);
+    }
+    jsize GetStringLength(jstring str) {
+        return functions->GetStringLength(this,str);
+    }
+    const jchar *GetStringChars(jstring str, jboolean *isCopy) {
+        return functions->GetStringChars(this,str,isCopy);
+    }
+    void ReleaseStringChars(jstring str, const jchar *chars) {
+        functions->ReleaseStringChars(this,str,chars);
+    }
+
+    jstring NewStringUTF(const char *utf) {
+        return functions->NewStringUTF(this,utf);
+    }
+    jsize GetStringUTFLength(jstring str) {
+        return functions->GetStringUTFLength(this,str);
+    }
+    const char* GetStringUTFChars(jstring str, jboolean *isCopy) {
+        return functions->GetStringUTFChars(this,str,isCopy);
+    }
+    void ReleaseStringUTFChars(jstring str, const char* chars) {
+        functions->ReleaseStringUTFChars(this,str,chars);
+    }
+
+    jsize GetArrayLength(jarray array) {
+        return functions->GetArrayLength(this,array);
+    }
+
+    jobjectArray NewObjectArray(jsize len, jclass clazz,
+				jobject init) {
+        return functions->NewObjectArray(this,len,clazz,init);
+    }
+    jobject GetObjectArrayElement(jobjectArray array, jsize index) {
+        return functions->GetObjectArrayElement(this,array,index);
+    }
+    void SetObjectArrayElement(jobjectArray array, jsize index,
+			       jobject val) {
+        functions->SetObjectArrayElement(this,array,index,val);
+    }
+
+    jbooleanArray NewBooleanArray(jsize len) {
+        return functions->NewBooleanArray(this,len);
+    }
+    jbyteArray NewByteArray(jsize len) {
+        return functions->NewByteArray(this,len);
+    }
+    jcharArray NewCharArray(jsize len) {
+        return functions->NewCharArray(this,len);
+    }
+    jshortArray NewShortArray(jsize len) {
+        return functions->NewShortArray(this,len);
+    }
+    jintArray NewIntArray(jsize len) {
+        return functions->NewIntArray(this,len);
+    }
+    jlongArray NewLongArray(jsize len) {
+        return functions->NewLongArray(this,len);
+    }
+    jfloatArray NewFloatArray(jsize len) {
+        return functions->NewFloatArray(this,len);
+    }
+    jdoubleArray NewDoubleArray(jsize len) {
+        return functions->NewDoubleArray(this,len);
+    }
+
+    jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {
+        return functions->GetBooleanArrayElements(this,array,isCopy);
+    }
+    jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {
+        return functions->GetByteArrayElements(this,array,isCopy);
+    }
+    jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {
+        return functions->GetCharArrayElements(this,array,isCopy);
+    }
+    jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {
+        return functions->GetShortArrayElements(this,array,isCopy);
+    }
+    jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {
+        return functions->GetIntArrayElements(this,array,isCopy);
+    }
+    jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {
+        return functions->GetLongArrayElements(this,array,isCopy);
+    }
+    jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {
+        return functions->GetFloatArrayElements(this,array,isCopy);
+    }
+    jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {
+        return functions->GetDoubleArrayElements(this,array,isCopy);
+    }
+
+    void ReleaseBooleanArrayElements(jbooleanArray array,
+				     jboolean *elems,
+				     jint mode) {
+        functions->ReleaseBooleanArrayElements(this,array,elems,mode);
+    }
+    void ReleaseByteArrayElements(jbyteArray array,
+				  jbyte *elems,
+				  jint mode) {
+        functions->ReleaseByteArrayElements(this,array,elems,mode);
+    }
+    void ReleaseCharArrayElements(jcharArray array,
+				  jchar *elems,
+				  jint mode) {
+        functions->ReleaseCharArrayElements(this,array,elems,mode);
+    }
+    void ReleaseShortArrayElements(jshortArray array,
+				   jshort *elems,
+				   jint mode) {
+        functions->ReleaseShortArrayElements(this,array,elems,mode);
+    }
+    void ReleaseIntArrayElements(jintArray array,
+				 jint *elems,
+				 jint mode) {
+        functions->ReleaseIntArrayElements(this,array,elems,mode);
+    }
+    void ReleaseLongArrayElements(jlongArray array,
+				  jlong *elems,
+				  jint mode) {
+        functions->ReleaseLongArrayElements(this,array,elems,mode);
+    }
+    void ReleaseFloatArrayElements(jfloatArray array,
+				   jfloat *elems,
+				   jint mode) {
+        functions->ReleaseFloatArrayElements(this,array,elems,mode);
+    }
+    void ReleaseDoubleArrayElements(jdoubleArray array,
+				    jdouble *elems,
+				    jint mode) {
+        functions->ReleaseDoubleArrayElements(this,array,elems,mode);
+    }
+
+    void GetBooleanArrayRegion(jbooleanArray array,
+			       jsize start, jsize len, jboolean *buf) {
+        functions->GetBooleanArrayRegion(this,array,start,len,buf);
+    }
+    void GetByteArrayRegion(jbyteArray array,
+			    jsize start, jsize len, jbyte *buf) {
+        functions->GetByteArrayRegion(this,array,start,len,buf);
+    }
+    void GetCharArrayRegion(jcharArray array,
+			    jsize start, jsize len, jchar *buf) {
+        functions->GetCharArrayRegion(this,array,start,len,buf);
+    }
+    void GetShortArrayRegion(jshortArray array,
+			     jsize start, jsize len, jshort *buf) {
+        functions->GetShortArrayRegion(this,array,start,len,buf);
+    }
+    void GetIntArrayRegion(jintArray array,
+			   jsize start, jsize len, jint *buf) {
+        functions->GetIntArrayRegion(this,array,start,len,buf);
+    }
+    void GetLongArrayRegion(jlongArray array,
+			    jsize start, jsize len, jlong *buf) {
+        functions->GetLongArrayRegion(this,array,start,len,buf);
+    }
+    void GetFloatArrayRegion(jfloatArray array,
+			     jsize start, jsize len, jfloat *buf) {
+        functions->GetFloatArrayRegion(this,array,start,len,buf);
+    }
+    void GetDoubleArrayRegion(jdoubleArray array,
+			      jsize start, jsize len, jdouble *buf) {
+        functions->GetDoubleArrayRegion(this,array,start,len,buf);
+    }
+
+    void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
+			       const jboolean *buf) {
+        functions->SetBooleanArrayRegion(this,array,start,len,buf);
+    }
+    void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,
+			    const jbyte *buf) {
+        functions->SetByteArrayRegion(this,array,start,len,buf);
+    }
+    void SetCharArrayRegion(jcharArray array, jsize start, jsize len,
+			    const jchar *buf) {
+        functions->SetCharArrayRegion(this,array,start,len,buf);
+    }
+    void SetShortArrayRegion(jshortArray array, jsize start, jsize len,
+			     const jshort *buf) {
+        functions->SetShortArrayRegion(this,array,start,len,buf);
+    }
+    void SetIntArrayRegion(jintArray array, jsize start, jsize len,
+			   const jint *buf) {
+        functions->SetIntArrayRegion(this,array,start,len,buf);
+    }
+    void SetLongArrayRegion(jlongArray array, jsize start, jsize len,
+			    const jlong *buf) {
+        functions->SetLongArrayRegion(this,array,start,len,buf);
+    }
+    void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
+			     const jfloat *buf) {
+        functions->SetFloatArrayRegion(this,array,start,len,buf);
+    }
+    void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
+			      const jdouble *buf) {
+        functions->SetDoubleArrayRegion(this,array,start,len,buf);
+    }
+
+    jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,
+			 jint nMethods) {
+        return functions->RegisterNatives(this,clazz,methods,nMethods);
+    }
+    jint UnregisterNatives(jclass clazz) {
+        return functions->UnregisterNatives(this,clazz);
+    }
+
+    jint MonitorEnter(jobject obj) {
+        return functions->MonitorEnter(this,obj);
+    }
+    jint MonitorExit(jobject obj) {
+        return functions->MonitorExit(this,obj);
+    }
+
+    jint GetJavaVM(JavaVM **vm) {
+        return functions->GetJavaVM(this,vm);
+    }
+
+    void GetStringRegion(jstring str, jsize start, jsize len, jchar *buf) {
+        functions->GetStringRegion(this,str,start,len,buf);
+    }
+    void GetStringUTFRegion(jstring str, jsize start, jsize len, char *buf) {
+        functions->GetStringUTFRegion(this,str,start,len,buf);
+    }
+
+    void * GetPrimitiveArrayCritical(jarray array, jboolean *isCopy) {
+        return functions->GetPrimitiveArrayCritical(this,array,isCopy);
+    }
+    void ReleasePrimitiveArrayCritical(jarray array, void *carray, jint mode) {
+        functions->ReleasePrimitiveArrayCritical(this,array,carray,mode);
+    }
+
+    const jchar * GetStringCritical(jstring string, jboolean *isCopy) {
+        return functions->GetStringCritical(this,string,isCopy);
+    }
+    void ReleaseStringCritical(jstring string, const jchar *cstring) {
+        functions->ReleaseStringCritical(this,string,cstring);
+    }
+
+    jweak NewWeakGlobalRef(jobject obj) {
+        return functions->NewWeakGlobalRef(this,obj);
+    }
+    void DeleteWeakGlobalRef(jweak ref) {
+        functions->DeleteWeakGlobalRef(this,ref);
+    }
+
+    jboolean ExceptionCheck() {
+	return functions->ExceptionCheck(this);
+    }
+
+    jobject NewDirectByteBuffer(void* address, jlong capacity) {
+        return functions->NewDirectByteBuffer(this, address, capacity);
+    }
+    void* GetDirectBufferAddress(jobject buf) {
+        return functions->GetDirectBufferAddress(this, buf);
+    }
+    jlong GetDirectBufferCapacity(jobject buf) {
+        return functions->GetDirectBufferCapacity(this, buf);
+    }
+
+#endif /* __cplusplus */
+};
+
+typedef struct JavaVMOption {
+    char *optionString;
+    void *extraInfo;
+} JavaVMOption;
+
+typedef struct JavaVMInitArgs {
+    jint version;
+
+    jint nOptions;
+    JavaVMOption *options;
+    jboolean ignoreUnrecognized;
+} JavaVMInitArgs;
+
+typedef struct JavaVMAttachArgs {
+    jint version;
+
+    char *name;
+    jobject group;
+} JavaVMAttachArgs;
+
+/* These structures will be VM-specific. */
+
+typedef struct JDK1_1InitArgs {
+    jint version;
+
+    char **properties;
+    jint checkSource;
+    jint nativeStackSize;
+    jint javaStackSize;
+    jint minHeapSize;
+    jint maxHeapSize;
+    jint verifyMode;
+    char *classpath;
+
+    jint (JNICALL *vfprintf)(FILE *fp, const char *format, va_list args);
+    void (JNICALL *exit)(jint code);
+    void (JNICALL *abort)(void);
+
+    jint enableClassGC;
+    jint enableVerboseGC;
+    jint disableAsyncGC;
+    jint verbose;
+    jboolean debugging;
+    jint debugPort;
+} JDK1_1InitArgs;
+
+typedef struct JDK1_1AttachArgs {
+    void * __padding; /* C compilers don't allow empty structures. */
+} JDK1_1AttachArgs;
+
+#define JDK1_2
+#define JDK1_4
+
+/* End VM-specific. */
+
+struct JNIInvokeInterface_ {
+    void *reserved0;
+    void *reserved1;
+    void *reserved2;
+
+    jint (JNICALL *DestroyJavaVM)(JavaVM *vm);
+
+    jint (JNICALL *AttachCurrentThread)(JavaVM *vm, void **penv, void *args);
+
+    jint (JNICALL *DetachCurrentThread)(JavaVM *vm);
+
+    jint (JNICALL *GetEnv)(JavaVM *vm, void **penv, jint version);
+
+    jint (JNICALL *AttachCurrentThreadAsDaemon)(JavaVM *vm, void **penv, void *args);
+};
+
+struct JavaVM_ {
+    const struct JNIInvokeInterface_ *functions;
+#ifdef __cplusplus
+
+    jint DestroyJavaVM() {
+        return functions->DestroyJavaVM(this);
+    }
+    jint AttachCurrentThread(void **penv, void *args) {
+        return functions->AttachCurrentThread(this, penv, args);
+    }
+    jint DetachCurrentThread() {
+        return functions->DetachCurrentThread(this);
+    }
+
+    jint GetEnv(void **penv, jint version) {
+        return functions->GetEnv(this, penv, version);
+    }
+    jint AttachCurrentThreadAsDaemon(void **penv, void *args) {
+        return functions->AttachCurrentThreadAsDaemon(this, penv, args);
+    }
+#endif
+};
+
+#ifdef _JNI_IMPLEMENTATION_
+#define _JNI_IMPORT_OR_EXPORT_ JNIEXPORT
+#else
+#define _JNI_IMPORT_OR_EXPORT_ JNIIMPORT
+#endif
+_JNI_IMPORT_OR_EXPORT_ jint JNICALL
+JNI_GetDefaultJavaVMInitArgs(void *args);
+
+_JNI_IMPORT_OR_EXPORT_ jint JNICALL
+JNI_CreateJavaVM(JavaVM **pvm, void **penv, void *args);
+
+_JNI_IMPORT_OR_EXPORT_ jint JNICALL
+JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);
+
+/* Defined by native libraries. */
+JNIEXPORT jint JNICALL
+JNI_OnLoad(JavaVM *vm, void *reserved);
+
+JNIEXPORT void JNICALL
+JNI_OnUnload(JavaVM *vm, void *reserved);
+
+#define JNI_VERSION_1_1 0x00010001
+#define JNI_VERSION_1_2 0x00010002
+#define JNI_VERSION_1_4 0x00010004
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* !_JAVASOFT_JNI_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/jdk1.5.0_10/include/jvmdi.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,1012 @@
+/*
+ * @(#)jvmdi.h	1.48 03/12/19
+ *
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+/*
+ *   Java Virtual Machine Debug Interface
+ *
+ *   Defines debugging functionality that a VM should provide.  
+ *
+ *   Should not overlap functionality in jni.h
+ */
+
+#ifndef _JAVASOFT_JVMDI_H_
+#define _JAVASOFT_JVMDI_H_
+
+#include "jni.h"
+
+#define JVMDI_VERSION_1    0x20010000
+#define JVMDI_VERSION_1_1  0x20010001
+#define JVMDI_VERSION_1_2  0x20010002
+#define JVMDI_VERSION_1_3  0x20010003
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef jobject jthread;
+
+typedef jobject jthreadGroup;
+
+struct _jframeID;
+typedef struct _jframeID *jframeID;
+
+  /* specifies program location "pc" - often byte code index */
+typedef jlong jlocation;
+
+  /* The jmethodID for methods that have been replaced */
+  /* via RedefineClasses - used when the implementation */
+  /* does not wish to retain replaced jmethodIDs */
+#define OBSOLETE_METHOD_ID ((jmethodID)(NULL))
+
+  /*
+   *  Errors
+   */
+
+typedef jint jvmdiError;
+
+  /* no error */
+#define JVMDI_ERROR_NONE                 ((jvmdiError)0)
+
+  /*
+   * Errors on thread operations
+   */
+
+  /* invalid thread */
+#define JVMDI_ERROR_INVALID_THREAD       ((jvmdiError)10)
+  /* invalid thread group */
+#define JVMDI_ERROR_INVALID_THREAD_GROUP ((jvmdiError)11)
+  /* invalid thread priority */
+#define JVMDI_ERROR_INVALID_PRIORITY     ((jvmdiError)12)
+  /* thread not suspended */
+#define JVMDI_ERROR_THREAD_NOT_SUSPENDED ((jvmdiError)13)
+  /* thread already suspended */
+#define JVMDI_ERROR_THREAD_SUSPENDED     ((jvmdiError)14)
+
+  /* 
+   * Errors on object and class operations
+   */
+
+  /* invalid object (implementation not required to gracefully catch) */
+#define JVMDI_ERROR_INVALID_OBJECT       ((jvmdiError)20)
+  /* invalid class (implementation not required to gracefully catch) */
+#define JVMDI_ERROR_INVALID_CLASS        ((jvmdiError)21)
+  /* class not prepared */
+#define JVMDI_ERROR_CLASS_NOT_PREPARED   ((jvmdiError)22)
+  /* invalid methodID (implementation not required to gracefully catch) */
+#define JVMDI_ERROR_INVALID_METHODID     ((jvmdiError)23)
+  /* invalid location */
+#define JVMDI_ERROR_INVALID_LOCATION     ((jvmdiError)24)
+  /* invalid fieldID (implementation not required to gracefully catch) */
+#define JVMDI_ERROR_INVALID_FIELDID      ((jvmdiError)25)
+
+  /*
+   * Errors on frame operations
+   */
+
+  /* invalid frameID (implementation not required to gracefully catch) */
+#define JVMDI_ERROR_INVALID_FRAMEID      ((jvmdiError)30)
+  /* there are no more frames on the stack */
+#define JVMDI_ERROR_NO_MORE_FRAMES       ((jvmdiError)31)
+  /* operation cannot be performed on this frame */
+#define JVMDI_ERROR_OPAQUE_FRAME         ((jvmdiError)32)
+  /* operation can only be performed on current frame */
+#define JVMDI_ERROR_NOT_CURRENT_FRAME    ((jvmdiError)33)
+  /* type mismatch (implementation not required to gracefully catch) */
+#define JVMDI_ERROR_TYPE_MISMATCH        ((jvmdiError)34)
+  /* invalid slot */
+#define JVMDI_ERROR_INVALID_SLOT         ((jvmdiError)35)
+
+  /*
+   * Errors on set/clear/find operations
+   */
+
+  /* item already present */
+#define JVMDI_ERROR_DUPLICATE            ((jvmdiError)40)
+  /* item not found */
+#define JVMDI_ERROR_NOT_FOUND            ((jvmdiError)41)
+
+  /*
+   * Errors on monitor operations
+   */
+
+  /* invalid monitor */
+#define JVMDI_ERROR_INVALID_MONITOR      ((jvmdiError)50)
+  /* wait, notify, notify all tried without entering monitor  */
+#define JVMDI_ERROR_NOT_MONITOR_OWNER    ((jvmdiError)51)
+  /* waiting thread interrupted */
+#define JVMDI_ERROR_INTERRUPT            ((jvmdiError)52)
+  
+  /*
+   * Class redefinition / operand stack errors
+   */
+
+  /* The equivalent of ClassFormatError */
+#define JVMDI_ERROR_INVALID_CLASS_FORMAT          ((jvmdiError)60)
+  /* The equivalent of ClassCircularityError */
+#define JVMDI_ERROR_CIRCULAR_CLASS_DEFINITION     ((jvmdiError)61)
+  /* The class bytes fail verification */
+#define JVMDI_ERROR_FAILS_VERIFICATION            ((jvmdiError)62)
+  /* The new class version adds new methods */
+  /* and can_add_method is false */
+#define JVMDI_ERROR_ADD_METHOD_NOT_IMPLEMENTED    ((jvmdiError)63)
+  /* The new class version changes fields */ 
+  /* and can_unrestrictedly_redefine_classes is false */
+#define JVMDI_ERROR_SCHEMA_CHANGE_NOT_IMPLEMENTED ((jvmdiError)64)
+  /* bci/operand stack/local var combination is not verifiably */
+  /* type safe */
+#define JVMDI_ERROR_INVALID_TYPESTATE             ((jvmdiError)65)
+  /* A direct superclass is different for the new class */
+  /* version, or the set of directly implemented */
+  /* interfaces is different */
+  /* and can_unrestrictedly_redefine_classes is false */
+#define JVMDI_ERROR_HIERARCHY_CHANGE_NOT_IMPLEMENTED ((jvmdiError)66)
+  /* The new class version does not declare a method */
+  /* declared in the old class version */
+  /* and can_unrestrictedly_redefine_classes is false */
+#define JVMDI_ERROR_DELETE_METHOD_NOT_IMPLEMENTED ((jvmdiError)67)
+  /* A class file has a version number not supported */
+  /* by this VM. */
+#define JVMDI_ERROR_UNSUPPORTED_VERSION           ((jvmdiError)68)
+  /* The class name defined in the new class file is */
+  /* different from the name in the old class object */
+#define JVMDI_ERROR_NAMES_DONT_MATCH              ((jvmdiError)69)
+  /* The new class version has different modifiers and */
+  /* can_unrestrictedly_redefine_classes is false */
+#define JVMDI_ERROR_CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED   ((jvmdiError)70)
+  /* A method in the new class version has different modifiers */
+  /* than its counterpart in the old class version */
+  /* and can_unrestrictedly_redefine_classes is false */
+#define JVMDI_ERROR_METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED  ((jvmdiError)71)
+
+  /*
+   * Miscellaneous errors
+   */
+
+  /* Not yet implemented */
+#define JVMDI_ERROR_NOT_IMPLEMENTED      ((jvmdiError)99)
+  /* null pointer */
+#define JVMDI_ERROR_NULL_POINTER         ((jvmdiError)100)
+  /* information is absent */
+#define JVMDI_ERROR_ABSENT_INFORMATION   ((jvmdiError)101)
+  /* invalid event type  */
+#define JVMDI_ERROR_INVALID_EVENT_TYPE   ((jvmdiError)102)
+  /* invalid argument  */
+#define JVMDI_ERROR_ILLEGAL_ARGUMENT     ((jvmdiError)103)
+
+  /*
+   * Universal errors. These errors may be returned by
+   * any JVMDI function, not just the ones for which they are listed
+   * below.
+   */
+
+  /* no more memory available for allocation */
+#define JVMDI_ERROR_OUT_OF_MEMORY        ((jvmdiError)110)
+  /* debugging has not been enabled in this VM */
+#define JVMDI_ERROR_ACCESS_DENIED        ((jvmdiError)111)
+  /* VM is dead (implementation not required to gracefully catch) */
+#define JVMDI_ERROR_VM_DEAD              ((jvmdiError)112)
+  /* internal error  */
+#define JVMDI_ERROR_INTERNAL             ((jvmdiError)113)
+  /* Thread calling JVMDI function not attached to VM */
+#define JVMDI_ERROR_UNATTACHED_THREAD    ((jvmdiError)115)
+
+
+  /*
+   *  Threads
+   */
+
+  /* Thread status is unknown */
+#define JVMDI_THREAD_STATUS_UNKNOWN      ((jint)-1)
+  /* Thread is waiting to die */
+#define JVMDI_THREAD_STATUS_ZOMBIE       ((jint)0)
+  /* Thread is runnable */
+#define JVMDI_THREAD_STATUS_RUNNING      ((jint)1)
+  /* Thread is sleeping - Thread.sleep() or JVM_Sleep() was called */
+#define JVMDI_THREAD_STATUS_SLEEPING     ((jint)2)
+  /* Thread is waiting on a java monitor */
+#define JVMDI_THREAD_STATUS_MONITOR      ((jint)3)
+  /* Thread is waiting - Thread.wait() or JVM_MonitorWait() was called */
+#define JVMDI_THREAD_STATUS_WAIT         ((jint)4)
+
+  /* Thread is suspended - Thread.suspend(), JVM_Suspend() or
+   * JVMDI_Suspend was called */
+#define JVMDI_SUSPEND_STATUS_SUSPENDED   ((jint)0x1)
+  /* Thread is at a breakpoint */
+#define JVMDI_SUSPEND_STATUS_BREAK       ((jint)0x2)
+
+
+  /* Thread priority constants */
+#define JVMDI_THREAD_MIN_PRIORITY   ((jint)1)
+#define JVMDI_THREAD_NORM_PRIORITY  ((jint)5)
+#define JVMDI_THREAD_MAX_PRIORITY   ((jint)10)
+
+typedef struct {
+    char *name;
+    jint  priority;
+    jboolean is_daemon;
+    jthreadGroup thread_group;
+    jobject context_class_loader;
+} JVMDI_thread_info;
+
+typedef struct {
+    jthreadGroup parent;
+    char *name;
+    jint  max_priority;
+    jboolean is_daemon;
+} JVMDI_thread_group_info;
+
+#define JVMDI_DISABLE ((jint) 0)
+#define JVMDI_ENABLE  ((jint) 1)
+
+/*
+ * Initial function for debug threads created through JVMDI
+ */
+typedef void (*JVMDI_StartFunction)(void *);
+
+/*
+ * Type for debug monitors created through JVMDI
+ */
+typedef void *JVMDI_RawMonitor;
+
+#define JVMDI_MONITOR_WAIT_FOREVER ((jlong)(-1))
+
+/*
+ * Monitor information
+ */
+typedef struct {
+    jthread owner;
+    jint entry_count;
+    jint waiter_count;
+    jthread *waiters;
+} JVMDI_monitor_info;
+
+typedef struct {
+    jint owned_monitor_count;
+    jobject *owned_monitors;
+} JVMDI_owned_monitor_info;
+
+  /*
+   *  Events
+   */
+
+    /* kind = JVMDI_EVENT_SINGLE_STEP */
+    typedef struct { 
+        jthread thread;
+        jclass clazz;
+        jmethodID method;
+        jlocation location;
+    } JVMDI_single_step_event_data;
+			
+    /* kind = JVMDI_EVENT_BREAKPOINT */
+    typedef struct { 
+        jthread thread;
+        jclass clazz;
+        jmethodID method;
+        jlocation location;
+    } JVMDI_breakpoint_event_data;
+    
+    /* kind = JVMDI_EVENT_FIELD_ACCESS */
+    typedef struct { 
+        jthread thread;
+        jclass clazz;
+        jmethodID method;
+        jlocation location;
+        jclass field_clazz;
+        jobject object;
+        jfieldID field;
+    } JVMDI_field_access_event_data;
+    
+    /* kind = JVMDI_EVENT_FIELD_MODIFICATION */
+    typedef struct { 
+        jthread thread;
+        jclass clazz;
+        jmethodID method;
+        jlocation location;
+        jclass field_clazz;
+        jobject object;
+        jfieldID field;
+        char signature_type;
+        jvalue new_value;
+    } JVMDI_field_modification_event_data;
+    
+    /* kind = JVMDI_EVENT_FRAME_POP */
+    /* kind = JVMDI_EVENT_METHOD_ENTRY */
+    /* kind = JVMDI_EVENT_METHOD_EXIT */
+    typedef struct { 
+        jthread thread;
+        jclass clazz;
+        jmethodID method;
+        jframeID frame;
+    } JVMDI_frame_event_data;
+    
+    /* kind = JVMDI_EVENT_EXCEPTION */
+    typedef struct { 
+        jthread thread;
+        jclass clazz;
+        jmethodID method;
+        jlocation location;
+        jobject exception;
+        jclass catch_clazz;
+        jmethodID catch_method;
+        jlocation catch_location;
+    } JVMDI_exception_event_data;
+    
+    /* kind = JVMDI_EVENT_EXCEPTION_CATCH */
+    typedef struct { 
+        jthread thread;
+        jclass clazz;
+        jmethodID method;
+        jlocation location;
+        jobject exception;
+    } JVMDI_exception_catch_event_data;
+    
+    /* kind = JVMDI_EVENT_USER_DEFINED */
+    typedef struct { 
+        jobject object;
+        jint key;
+    } JVMDI_user_event_data;
+    
+    /* kind = JVMDI_EVENT_THREAD_END or */
+    /* JVMDI_EVENT_THREAD_START */
+    typedef struct { 
+        jthread thread;
+    } JVMDI_thread_change_event_data;
+    
+    /* kind = JVMDI_EVENT_CLASS_LOAD, */
+    /* JVMDI_EVENT_CLASS_UNLOAD, or */
+    /* JVMDI_EVENT_CLASS_PREPARE */
+    typedef struct { 
+        jthread thread;
+        jclass clazz;
+    } JVMDI_class_event_data;
+    
+/* This stucture passes information about the event.
+ * location is the index of the last instruction executed. 
+ */
+typedef struct {
+    jint kind;		/* the discriminant */
+
+    union {
+	/* kind = JVMDI_EVENT_SINGLE_STEP */
+        JVMDI_single_step_event_data single_step;
+			
+        /* kind = JVMDI_EVENT_BREAKPOINT */
+        JVMDI_breakpoint_event_data breakpoint;
+
+        /* kind = JVMDI_EVENT_FRAME_POP */
+        /* kind = JVMDI_EVENT_METHOD_ENTRY */
+        /* kind = JVMDI_EVENT_METHOD_EXIT */
+        JVMDI_frame_event_data frame;
+
+        /* kind = JVMDI_EVENT_FIELD_ACCESS */
+        JVMDI_field_access_event_data field_access;
+
+        /* kind = JVMDI_EVENT_FIELD_MODIFICATION */
+        JVMDI_field_modification_event_data field_modification;
+
+        /* kind = JVMDI_EVENT_EXCEPTION */
+        JVMDI_exception_event_data exception;
+
+        /* kind = JVMDI_EVENT_EXCEPTION_CATCH */
+        JVMDI_exception_catch_event_data exception_catch;
+
+        /* kind = JVMDI_EVENT_USER_DEFINED */
+        JVMDI_user_event_data user;
+			
+        /* kind = JVMDI_EVENT_THREAD_END or */
+        /* JVMDI_EVENT_THREAD_START */
+        JVMDI_thread_change_event_data thread_change;
+			
+        /* kind = JVMDI_EVENT_CLASS_LOAD, */
+        /* JVMDI_EVENT_CLASS_UNLOAD, or */
+        /* JVMDI_EVENT_CLASS_PREPARE */
+        JVMDI_class_event_data class_event;
+			
+        /* kind = JVMDI_EVENT_VM_DEATH, JVMDI_EVENT_VM_INIT */
+        /* no additional fields */		
+    } u;
+} JVMDI_Event;
+
+	/*** event kinds ***/
+#define JVMDI_EVENT_SINGLE_STEP   ((jint)1)
+#define JVMDI_EVENT_BREAKPOINT    ((jint)2)
+#define JVMDI_EVENT_FRAME_POP     ((jint)3)
+#define JVMDI_EVENT_EXCEPTION     ((jint)4)
+#define JVMDI_EVENT_USER_DEFINED  ((jint)5)
+#define JVMDI_EVENT_THREAD_START  ((jint)6)
+#define JVMDI_EVENT_THREAD_END    ((jint)7)
+#define JVMDI_EVENT_CLASS_PREPARE ((jint)8)
+#define JVMDI_EVENT_CLASS_UNLOAD  ((jint)9)
+#define JVMDI_EVENT_CLASS_LOAD    ((jint)10)
+#define JVMDI_EVENT_FIELD_ACCESS       ((jint)20)
+#define JVMDI_EVENT_FIELD_MODIFICATION ((jint)21)
+#define JVMDI_EVENT_EXCEPTION_CATCH    ((jint)30)
+#define JVMDI_EVENT_METHOD_ENTRY       ((jint)40)
+#define JVMDI_EVENT_METHOD_EXIT        ((jint)41)
+#define JVMDI_EVENT_VM_INIT            ((jint)90)
+#define JVMDI_EVENT_VM_DEATH           ((jint)99)
+
+#define JVMDI_MAX_EVENT_TYPE_VAL       ((jint)99)
+
+
+
+/* event handler hook */
+typedef void (*JVMDI_EventHook)(JNIEnv *env, JVMDI_Event *event);
+
+typedef jvmdiError (*JVMDI_AllocHook) (jlong size, jbyte** memPtr);
+typedef jvmdiError (*JVMDI_DeallocHook) (jbyte* buffer);
+
+/*
+ * Class states used in JVMDI_GetClassStatus
+ */
+#define JVMDI_CLASS_STATUS_VERIFIED          ((jint)0x01)
+#define JVMDI_CLASS_STATUS_PREPARED          ((jint)0x02)
+#define JVMDI_CLASS_STATUS_INITIALIZED       ((jint)0x04)
+ /* Error prevents initialization */
+#define JVMDI_CLASS_STATUS_ERROR             ((jint)0x08) 
+
+/* structure for returning line number information 
+ */
+typedef struct {
+    jlocation start_location;
+    jint line_number;
+} JVMDI_line_number_entry;
+
+
+/* structure for returning local variable information 
+ */
+typedef struct {
+    jlocation start_location;   /* variable valid start_location */
+    jint length;                /* upto start_location+length */ 
+    char *name;                 /* name in UTF8 */
+    char *signature;            /* type signature in UTF8 */
+    jint slot;                  /* variable slot, see JVMDI_GetLocal*()  */
+} JVMDI_local_variable_entry;
+
+/* structure for returning exception handler information 
+ */
+typedef struct {
+    jlocation start_location;
+    jlocation end_location;
+    jlocation handler_location;
+    jclass exception;           /* if null, all exceptions */
+} JVMDI_exception_handler_entry;
+
+#define JVMDI_OPERAND_TYPE_REFERENCE      ((jint)1)
+#define JVMDI_OPERAND_TYPE_INT            ((jint)2)
+#define JVMDI_OPERAND_TYPE_FLOAT          ((jint)3)
+#define JVMDI_OPERAND_TYPE_LONG0          ((jint)4) /* least sig. 32 bits */
+#define JVMDI_OPERAND_TYPE_LONG1          ((jint)5) /* most sig. 32 bits */
+#define JVMDI_OPERAND_TYPE_DOUBLE0        ((jint)6) /* least sig. 32 bits */
+#define JVMDI_OPERAND_TYPE_DOUBLE1        ((jint)7) /* most sig. 32 bits */
+#define JVMDI_OPERAND_TYPE_RETURN_ADDRESS ((jint)8)
+
+typedef struct {
+    jint word;                 /* 32 bit operand stack quantities */
+    jint type;                 /* type encoding of the operand word */
+                               /* one of JVMDI_OPERAND_TYPE_* */
+} JVMDI_operand_stack_element;
+
+typedef struct { 
+    jint instance_field_count; /* number of instance fields referencing obj */
+    struct JVMDI_instance_field {
+        jobject instance;      /* instance referencing obj */
+        jfieldID field;        /* field holding reference */
+    } *instance_fields;        /* instanceField_count of them */
+     
+    jint static_field_count;   /* number of static fields referencing obj */
+    struct JVMDI_static_field {
+        jclass clazz;          /* class referencing obj */
+        jfieldID static_field; /* field holding reference */
+    } *static_fields;          /* static_field_count of them */
+    
+    jint array_element_count;  /* number of array elements referencing obj */
+    struct JVMDI_array_element {
+        jobjectArray array;    /* array referencing obj */
+        jint index;            /* index holding reference */
+    } *array_elements;         /* array_element_count of them */
+    
+    jint frame_slot_count;     /* number of frame slots referencing obj */
+    struct JVMDI_frame_slot {
+        jthread thread;        /* thread of the frame */
+        jframeID frame;        /* frame referencing obj */
+        jint slot;             /* slot holding reference */
+    } *frame_slots;            /* frame_slot_count of them */
+} JVMDI_object_reference_info;
+
+/* structure for defining a class
+*/
+typedef struct {
+    jclass clazz;              /* Class object for this class */
+    jint class_byte_count;     /* number of bytes defining class (below) */
+    jbyte *class_bytes;        /* bytes defining class (in JVM spec */
+                               /* Class File Format) */
+} JVMDI_class_definition;
+
+  /* For backwards compatibility */
+#define can_change_schema can_unrestrictedly_redefine_classes
+
+typedef struct {
+    unsigned int can_watch_field_modification      : 1;
+    unsigned int can_watch_field_access            : 1;
+    unsigned int can_get_bytecodes                 : 1;
+    unsigned int can_get_synthetic_attribute       : 1;
+    unsigned int can_get_owned_monitor_info        : 1;
+    unsigned int can_get_current_contended_monitor : 1;
+    unsigned int can_get_monitor_info              : 1;
+    unsigned int can_get_heap_info                 : 1;
+    unsigned int can_get_operand_stack             : 1;
+    unsigned int can_set_operand_stack             : 1;
+    unsigned int can_pop_frame                     : 1;
+    unsigned int can_get_class_definition          : 1;
+    unsigned int can_redefine_classes              : 1; 
+    unsigned int can_add_method                    : 1;
+    unsigned int can_unrestrictedly_redefine_classes : 1;
+    unsigned int can_suspend_resume_thread_lists   : 1;
+} JVMDI_capabilities;
+
+typedef struct JVMDI_Interface_1_ {
+    jvmdiError (JNICALL *SetEventHook)
+      (JVMDI_EventHook hook);
+    jvmdiError (JNICALL *SetEventNotificationMode)
+      (jint mode, jint eventType, jthread thread, ...);
+
+    jvmdiError (JNICALL *GetThreadStatus)
+      (jthread thread,
+       jint *threadStatusPtr, jint *suspendStatusPtr);
+    jvmdiError (JNICALL *GetAllThreads)
+      (jint *threadsCountPtr, jthread **threadsPtr);
+    jvmdiError (JNICALL *SuspendThread)
+      (jthread thread); 
+    jvmdiError (JNICALL *ResumeThread)
+      (jthread thread);
+    jvmdiError (JNICALL *StopThread)
+      (jthread thread, jobject exception);
+    jvmdiError (JNICALL *InterruptThread)
+      (jthread thread);
+    jvmdiError (JNICALL *GetThreadInfo)
+      (jthread thread, JVMDI_thread_info *infoPtr);
+    jvmdiError (JNICALL *GetOwnedMonitorInfo)
+      (jthread thread, JVMDI_owned_monitor_info *infoPtr);
+    jvmdiError (JNICALL *GetCurrentContendedMonitor)
+      (jthread thread, jobject *monitor);
+    jvmdiError (JNICALL *RunDebugThread)
+      (jthread thread, JVMDI_StartFunction proc, void *arg,
+       int priority);
+
+    jvmdiError (JNICALL *GetTopThreadGroups)
+      (jint *groupCountPtr, jthreadGroup **groupsPtr);
+    jvmdiError (JNICALL *GetThreadGroupInfo)
+      (jthreadGroup group, JVMDI_thread_group_info *infoPtr);
+    jvmdiError (JNICALL *GetThreadGroupChildren)
+      (jthreadGroup group, 
+       jint *threadCountPtr, jthread **threadsPtr,
+       jint *groupCountPtr, jthreadGroup **groupsPtr);
+
+    jvmdiError (JNICALL *GetFrameCount)
+      (jthread thread, jint *countPtr);
+    jvmdiError (JNICALL *GetCurrentFrame)
+      (jthread thread, jframeID *framePtr);
+    jvmdiError (JNICALL *GetCallerFrame)
+      (jframeID called, jframeID *framePtr);
+    jvmdiError (JNICALL *GetFrameLocation)
+      (jframeID frame, jclass *classPtr, jmethodID *methodPtr,
+       jlocation *locationPtr);
+    jvmdiError (JNICALL *NotifyFramePop)
+      (jframeID frame); 
+    jvmdiError (JNICALL *GetLocalObject)
+      (jframeID frame, jint slot, jobject *valuePtr);
+    jvmdiError (JNICALL *GetLocalInt)
+      (jframeID frame, jint slot, jint *valuePtr);
+    jvmdiError (JNICALL *GetLocalLong)
+      (jframeID frame, jint slot, jlong *valuePtr);
+    jvmdiError (JNICALL *GetLocalFloat)
+      (jframeID frame, jint slot, jfloat *valuePtr);
+    jvmdiError (JNICALL *GetLocalDouble)
+      (jframeID frame, jint slot, jdouble *valuePtr);
+    jvmdiError (JNICALL *SetLocalObject)
+      (jframeID frame, jint slot, jobject value);
+    jvmdiError (JNICALL *SetLocalInt)
+      (jframeID frame, jint slot, jint value);
+    jvmdiError (JNICALL *SetLocalLong)
+      (jframeID frame, jint slot, jlong value);
+    jvmdiError (JNICALL *SetLocalFloat)
+      (jframeID frame, jint slot, jfloat value);
+    jvmdiError (JNICALL *SetLocalDouble)
+      (jframeID frame, jint slot, jdouble value);
+
+    jvmdiError (JNICALL *CreateRawMonitor)
+      (char *name, JVMDI_RawMonitor *monitorPtr);
+    jvmdiError (JNICALL *DestroyRawMonitor)
+      (JVMDI_RawMonitor monitor);
+    jvmdiError (JNICALL *RawMonitorEnter)
+      (JVMDI_RawMonitor monitor);
+    jvmdiError (JNICALL *RawMonitorExit)
+      (JVMDI_RawMonitor monitor);
+    jvmdiError (JNICALL *RawMonitorWait)
+      (JVMDI_RawMonitor monitor, jlong millis);
+    jvmdiError (JNICALL *RawMonitorNotify)
+      (JVMDI_RawMonitor monitor);
+    jvmdiError (JNICALL *RawMonitorNotifyAll)
+      (JVMDI_RawMonitor monitor);
+
+    jvmdiError (JNICALL *SetBreakpoint)
+      (jclass clazz, jmethodID method, jlocation location);
+    jvmdiError (JNICALL *ClearBreakpoint)
+      (jclass clazz, jmethodID method, jlocation location);
+    jvmdiError (JNICALL *ClearAllBreakpoints)
+      ();
+
+    jvmdiError (JNICALL *SetFieldAccessWatch)
+      (jclass clazz, jfieldID field);
+    jvmdiError (JNICALL *ClearFieldAccessWatch)
+      (jclass clazz, jfieldID field);
+    jvmdiError (JNICALL *SetFieldModificationWatch)
+      (jclass clazz, jfieldID field);
+    jvmdiError (JNICALL *ClearFieldModificationWatch)
+      (jclass clazz, jfieldID field);
+
+    jvmdiError (JNICALL *SetAllocationHooks)
+      (JVMDI_AllocHook ahook, JVMDI_DeallocHook dhook);
+    jvmdiError (JNICALL *Allocate)
+      (jlong size, jbyte** memPtr);
+    jvmdiError (JNICALL *Deallocate)
+      (jbyte* mem);
+
+    jvmdiError (JNICALL *GetClassSignature)
+      (jclass clazz, char **sigPtr);
+    jvmdiError (JNICALL *GetClassStatus)
+      (jclass clazz, jint *statusPtr);
+    jvmdiError (JNICALL *GetSourceFileName)
+      (jclass clazz, char **sourceNamePtr);
+    jvmdiError (JNICALL *GetClassModifiers)
+      (jclass clazz, jint *modifiersPtr);
+    jvmdiError (JNICALL *GetClassMethods)
+      (jclass clazz, jint *methodCountPtr, jmethodID **methodsPtr);
+    jvmdiError (JNICALL *GetClassFields)
+       (jclass clazz, jint *fieldCountPtr, jfieldID **fieldsPtr);
+    jvmdiError (JNICALL *GetImplementedInterfaces)
+      (jclass clazz, jint *interfaceCountPtr, jclass **interfacesPtr);
+    jvmdiError (JNICALL *IsInterface)
+      (jclass clazz, jboolean *isInterfacePtr);
+    jvmdiError (JNICALL *IsArrayClass)
+      (jclass clazz, jboolean *isArrayClassPtr);
+    jvmdiError (JNICALL *GetClassLoader)
+      (jclass clazz, jobject *classloaderPtr);
+
+    jvmdiError (JNICALL *GetObjectHashCode)
+      (jobject object, jint *hashCodePtr);
+    jvmdiError (JNICALL *GetMonitorInfo)
+      (jobject object, JVMDI_monitor_info *infoPtr);
+
+    jvmdiError (JNICALL *GetFieldName)
+      (jclass clazz, jfieldID field, char **namePtr, char **signaturePtr);
+    jvmdiError (JNICALL *GetFieldDeclaringClass)
+      (jclass clazz, jfieldID field, jclass *declaringClassPtr);
+    jvmdiError (JNICALL *GetFieldModifiers)
+      (jclass clazz, jfieldID field, jint *modifiersPtr);
+    jvmdiError (JNICALL *IsFieldSynthetic)
+      (jclass clazz, jfieldID field, jboolean *isSyntheticPtr);
+
+    jvmdiError (JNICALL *GetMethodName)
+      (jclass clazz, jmethodID method, 
+       char **namePtr, char **signaturePtr);
+    jvmdiError (JNICALL *GetMethodDeclaringClass)
+      (jclass clazz, jmethodID method, jclass *declaringClassPtr);
+    jvmdiError (JNICALL *GetMethodModifiers)
+      (jclass clazz, jmethodID method, jint *modifiersPtr);
+    jvmdiError (JNICALL *GetMaxStack)
+      (jclass clazz, jmethodID method, jint *maxPtr);
+    jvmdiError (JNICALL *GetMaxLocals)
+      (jclass clazz, jmethodID method, jint *maxPtr);
+    jvmdiError (JNICALL *GetArgumentsSize)
+      (jclass clazz, jmethodID method, jint *sizePtr);
+    jvmdiError (JNICALL *GetLineNumberTable)
+      (jclass clazz, jmethodID method,
+       jint *entryCountPtr, JVMDI_line_number_entry **tablePtr);
+    jvmdiError (JNICALL *GetMethodLocation)
+      (jclass clazz, jmethodID method,
+       jlocation *startLocationPtr, jlocation *endLocationPtr);
+    jvmdiError (JNICALL *GetLocalVariableTable)
+      (jclass clazz, jmethodID method,
+       jint *entryCountPtr, JVMDI_local_variable_entry **tablePtr);
+    jvmdiError (JNICALL *GetExceptionHandlerTable)
+      (jclass clazz, jmethodID method,
+       jint *entryCountPtr, JVMDI_exception_handler_entry **tablePtr);
+    jvmdiError (JNICALL *GetThrownExceptions)
+      (jclass clazz, jmethodID method,
+       jint *exceptionCountPtr, jclass **exceptionsPtr);
+    jvmdiError (JNICALL *GetBytecodes)
+      (jclass clazz, jmethodID method,
+       jint *bytecodeCountPtr, jbyte **bytecodesPtr);
+    jvmdiError (JNICALL *IsMethodNative)
+      (jclass clazz, jmethodID method, jboolean *isNativePtr);
+    jvmdiError (JNICALL *IsMethodSynthetic)
+      (jclass clazz, jmethodID method, jboolean *isSyntheticPtr);
+
+    jvmdiError (JNICALL *GetLoadedClasses)
+      (jint *classCountPtr, jclass **classesPtr);
+    jvmdiError (JNICALL *GetClassLoaderClasses)
+      (jobject initiatingLoader, jint *classesCountPtr, 
+       jclass **classesPtr);
+
+    jvmdiError (JNICALL *PopFrame)
+      (jthread thread);
+    jvmdiError (JNICALL *SetFrameLocation)
+      (jframeID frame, jlocation location);
+    jvmdiError (JNICALL *GetOperandStack)
+      (jframeID frame, jint *operandStackSizePtr, 
+       JVMDI_operand_stack_element **operandStackPtr);
+    jvmdiError (JNICALL *SetOperandStack)
+      (jframeID frame, jint operandStackSize, 
+       JVMDI_operand_stack_element *operandStack);
+    jvmdiError (JNICALL *AllInstances)
+      (jclass clazz, jint *instanceCountPtr, jobject **instancesPtr);
+    jvmdiError (JNICALL *References)
+      (jobject obj, JVMDI_object_reference_info *refs);
+    jvmdiError (JNICALL *GetClassDefinition)
+      (jclass clazz, JVMDI_class_definition *classDefPtr);
+    jvmdiError (JNICALL *RedefineClasses)
+      (jint classCount, JVMDI_class_definition *classDefs);
+
+    jvmdiError (JNICALL *GetVersionNumber)
+      (jint *versionPtr);
+    jvmdiError (JNICALL *GetCapabilities)
+      (JVMDI_capabilities *capabilitiesPtr);
+
+    jvmdiError (JNICALL *GetSourceDebugExtension)
+      (jclass clazz, char **sourceDebugExtension);
+    jvmdiError (JNICALL *IsMethodObsolete)
+      (jclass clazz, jmethodID method, jboolean *isObsoletePtr);
+
+    jvmdiError (JNICALL *SuspendThreadList)
+      (jint reqCount, jthread *reqList, jvmdiError *results); 
+    jvmdiError (JNICALL *ResumeThreadList)
+      (jint reqCount, jthread *reqList, jvmdiError *results); 
+} JVMDI_Interface_1;
+  
+#ifndef NO_JVMDI_MACROS
+
+#define JVMDI_ERROR_DUPLICATE_BREAKPOINT JVMDI_ERROR_DUPLICATE
+#define JVMDI_ERROR_NO_SUCH_BREAKPOINT   JVMDI_ERROR_NOT_FOUND
+#define JVMDI_ERROR_DUPLICATE_FRAME_POP  JVMDI_ERROR_DUPLICATE
+
+
+static JVMDI_Interface_1 *jvmdi_interface = NULL;
+static JavaVM *j_vm;
+
+#ifdef __cplusplus
+#define SetJVMDIfromJNIEnv(a_env) ( (jvmdi_interface == NULL)?  \
+              ((a_env)->GetJavaVM(&j_vm),  \
+               (j_vm)->GetEnv((void **)&jvmdi_interface,  \
+                               JVMDI_VERSION_1)):0)
+#else
+#define SetJVMDIfromJNIEnv(a_env) ( (jvmdi_interface == NULL)?  \
+              ((*a_env)->GetJavaVM(a_env, &j_vm), \
+               (*j_vm)->GetEnv(j_vm, (void **)&jvmdi_interface, \
+                               JVMDI_VERSION_1)):0)
+#endif
+
+#define JVMDI_SetEventHook(a_env, a1) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->SetEventHook(a1) )
+#define JVMDI_GetThreadStatus(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetThreadStatus(a1, a2, a3) )
+#define JVMDI_GetAllThreads(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetAllThreads(a1, a2) )
+#define JVMDI_SuspendThread(a_env, a1) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->SuspendThread(a1) )
+#define JVMDI_ResumeThread(a_env, a1) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->ResumeThread(a1) )
+#define JVMDI_StopThread(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->StopThread(a1, a2) )
+#define JVMDI_InterruptThread(a_env, a1) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->InterruptThread(a1) )
+#define JVMDI_SetSingleStep(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->SetEventNotificationMode( \
+                                       (a2) ? JVMDI_ENABLE : JVMDI_DISABLE, \
+                                        JVMDI_EVENT_SINGLE_STEP, a1) )
+#define JVMDI_GetThreadInfo(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetThreadInfo(a1, a2) )
+#define JVMDI_RunDebugThread(a_env, a1, a2, a3, a4) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->RunDebugThread(a1, a2, a3, a4) )
+#define JVMDI_GetTopThreadGroups(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetTopThreadGroups(a1, a2) )
+#define JVMDI_GetThreadGroupInfo(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetThreadGroupInfo(a1, a2) )
+#define JVMDI_GetThreadGroupChildren(a_env, a1, a2, a3, a4, a5) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetThreadGroupChildren(a1, a2, a3, a4, a5) )
+#define JVMDI_GetCurrentFrame(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetCurrentFrame(a1, a2) )
+#define JVMDI_GetCallerFrame(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetCallerFrame(a1, a2) )
+#define JVMDI_GetFrameLocation(a_env, a1, a2, a3, a4) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetFrameLocation(a1, a2, a3, a4) )
+#define JVMDI_NotifyFramePop(a_env, a1) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->NotifyFramePop(a1) )
+#define JVMDI_GetLocalObject(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetLocalObject(a1, a2, a3) )
+#define JVMDI_GetLocalInt(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetLocalInt(a1, a2, a3) )
+#define JVMDI_GetLocalLong(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetLocalLong(a1, a2, a3) )
+#define JVMDI_GetLocalFloat(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetLocalFloat(a1, a2, a3) )
+#define JVMDI_GetLocalDouble(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetLocalDouble(a1, a2, a3) )
+#define JVMDI_SetLocalObject(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->SetLocalObject(a1, a2, a3) )
+#define JVMDI_SetLocalInt(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->SetLocalInt(a1, a2, a3) )
+#define JVMDI_SetLocalLong(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->SetLocalLong(a1, a2, a3) )
+#define JVMDI_SetLocalFloat(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->SetLocalFloat(a1, a2, a3) )
+#define JVMDI_SetLocalDouble(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->SetLocalDouble(a1, a2, a3) )
+#define JVMDI_CreateRawMonitor(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->CreateRawMonitor(a1, a2) )
+#define JVMDI_DestroyRawMonitor(a_env, a1) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->DestroyRawMonitor(a1) )
+#define JVMDI_RawMonitorEnter(a_env, a1) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->RawMonitorEnter(a1) )
+#define JVMDI_RawMonitorExit(a_env, a1) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->RawMonitorExit(a1) )
+#define JVMDI_RawMonitorWait(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->RawMonitorWait(a1, a2) )
+#define JVMDI_RawMonitorNotify(a_env, a1) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->RawMonitorNotify(a1) )
+#define JVMDI_RawMonitorNotifyAll(a_env, a1) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->RawMonitorNotifyAll(a1) )
+#define JVMDI_SetBreakpoint(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->SetBreakpoint(a1, a2, a3) )
+#define JVMDI_ClearBreakpoint(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->ClearBreakpoint(a1, a2, a3) )
+#define JVMDI_ClearAllBreakpoints(a_env) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->ClearAllBreakpoints() )
+#define JVMDI_SetAllocationHooks(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->SetAllocationHooks(a1, a2) )
+#define JVMDI_Allocate(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->Allocate(a1, a2) )
+#define JVMDI_Deallocate(a_env, a1) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->Deallocate(a1) )
+#define JVMDI_GetClassSignature(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetClassSignature(a1, a2) )
+#define JVMDI_GetClassStatus(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetClassStatus(a1, a2) )
+#define JVMDI_GetSourceFileName(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetSourceFileName(a1, a2) )
+#define JVMDI_GetClassModifiers(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetClassModifiers(a1, a2) )
+#define JVMDI_GetClassMethods(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetClassMethods(a1, a2, a3) )
+#define JVMDI_GetClassFields(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetClassFields(a1, a2, a3) )
+#define JVMDI_GetImplementedInterfaces(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetImplementedInterfaces(a1, a2, a3) )
+#define JVMDI_IsInterface(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->IsInterface(a1, a2) )
+#define JVMDI_IsArrayClass(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->IsArrayClass(a1, a2) )
+#define JVMDI_ClassLoader(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetClassLoader(a1, a2) )
+#define JVMDI_GetFieldName(a_env, a1, a2, a3, a4) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetFieldName(a1, a2, a3, a4) )
+#define JVMDI_GetFieldDeclaringClass(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetFieldDeclaringClass(a1, a2, a3) )
+#define JVMDI_GetFieldModifiers(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetFieldModifiers(a1, a2, a3) )
+#define JVMDI_GetMethodName(a_env, a1, a2, a3, a4) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetMethodName(a1, a2, a3, a4) )
+#define JVMDI_GetMethodDeclaringClass(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetMethodDeclaringClass(a1, a2, a3) )
+#define JVMDI_GetMethodModifiers(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetMethodModifiers(a1, a2, a3) )
+#define JVMDI_GetMaxStack(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetMaxStack(a1, a2, a3) )
+#define JVMDI_GetMaxLocals(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetMaxLocals(a1, a2, a3) )
+#define JVMDI_GetArgumentsSize(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetArgumentsSize(a1, a2, a3) )
+#define JVMDI_GetLineNumberTable(a_env, a1, a2, a3, a4) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetLineNumberTable(a1, a2, a3, a4) )
+#define JVMDI_GetMethodLocation(a_env, a1, a2, a3, a4) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetMethodLocation(a1, a2, a3, a4) )
+#define JVMDI_GetLocalVariableTable(a_env, a1, a2, a3, a4) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetLocalVariableTable(a1, a2, a3, a4) )
+#define JVMDI_GetExceptionHandlerTable(a_env, a1, a2, a3, a4) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetExceptionHandlerTable(a1, a2, a3, a4) )
+#define JVMDI_GetThrownExceptions(a_env, a1, a2, a3, a4) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetThrownExceptions(a1, a2, a3, a4) )
+#define JVMDI_GetBytecodes(a_env, a1, a2, a3, a4) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetBytecodes(a1, a2, a3, a4) )
+#define JVMDI_IsMethodNative(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->IsMethodNative(a1, a2, a3) )
+#define JVMDI_GetLoadedClasses(a_env, a1, a2) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetLoadedClasses(a1, a2) )
+#define JVMDI_GetClassLoaderClasses(a_env, a1, a2, a3) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetClassLoaderClasses(a1, a2, a3) )
+#define JVMDI_GetVersionNumber(a_env, a1) ( \
+              SetJVMDIfromJNIEnv(a_env), \
+              jvmdi_interface->GetVersionNumber(a1) )
+
+#endif /* !NO_JVMDI_MACROS */
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* !_JAVASOFT_JVMDI_H_ */
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/jdk1.5.0_10/include/jvmpi.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,642 @@
+/*
+ * @(#)jvmpi.h	1.28 03/12/19
+ *
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+#ifndef _JAVASOFT_JVMPI_H_
+#define _JAVASOFT_JVMPI_H_
+
+#include "jni.h"
+
+#define JVMPI_VERSION_1   ((jint)0x10000001)  /* implied 0 for minor version */
+#define JVMPI_VERSION_1_1 ((jint)0x10000002)
+#define JVMPI_VERSION_1_2 ((jint)0x10000003)
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+  typedef void (*jvmpi_void_function_of_void)(void *);
+#ifdef __cplusplus
+}
+#endif
+
+/****************************************************************
+ * Profiler interface data structures.
+ ****************************************************************/
+/* identifier types. */
+struct _jobjectID;
+typedef struct _jobjectID * jobjectID;       /* type of object ids */ 
+
+/* raw monitors */
+struct _JVMPI_RawMonitor;
+typedef struct _JVMPI_RawMonitor * JVMPI_RawMonitor;
+
+/* call frame */
+typedef struct {
+    jint lineno;                      /* line number in the source file */
+    jmethodID method_id;              /* method executed in this frame */
+} JVMPI_CallFrame;
+
+/* call trace */
+typedef struct {
+    JNIEnv *env_id;                   /* Env where trace was recorded */
+    jint num_frames;                  /* number of frames in this trace */
+    JVMPI_CallFrame *frames;          /* frames */
+} JVMPI_CallTrace;
+
+/* method */
+typedef struct {
+    char *method_name;                /* name of method */
+    char *method_signature;           /* signature of method */
+    jint start_lineno;                /* -1 if native, abstract .. */
+    jint end_lineno;                  /* -1 if native, abstract .. */
+    jmethodID method_id;              /* id assigned to this method */
+} JVMPI_Method;
+
+/* Field */
+typedef struct {
+    char *field_name;                 /* name of field */
+    char *field_signature;            /* signature of field */
+} JVMPI_Field;
+
+/* line number info for a compiled method */
+typedef struct {
+    jint offset;                      /* offset from beginning of method */
+    jint lineno;                      /* lineno from beginning of src file */
+} JVMPI_Lineno;
+
+/* event */
+typedef struct {
+    jint event_type;                  /* event_type */
+    JNIEnv *env_id;                   /* env where this event occured */
+  
+    union {
+        struct {
+	    const char *class_name;   /* class name */
+	    char *source_name;        /* name of source file */
+	    jint num_interfaces;      /* number of interfaces implemented */
+  	    jint num_methods;         /* number of methods in the class */
+	    JVMPI_Method *methods;    /* methods */
+	    jint num_static_fields;   /* number of static fields */
+	    JVMPI_Field *statics;     /* static fields */
+	    jint num_instance_fields; /* number of instance fields */
+	    JVMPI_Field *instances;   /* instance fields */
+	    jobjectID class_id;       /* id of the class object */
+	} class_load;
+
+        struct {
+	    jobjectID class_id;       /* id of the class object */
+	} class_unload;
+
+        struct {
+	    unsigned char *class_data;        /* content of class file */
+	    jint class_data_len;              /* class file length */
+	    unsigned char *new_class_data;    /* instrumented class file */
+	    jint new_class_data_len;          /* new class file length */
+	    void * (*malloc_f)(unsigned int); /* memory allocation function */
+	} class_load_hook;
+
+        struct {
+            jint arena_id;
+	    jobjectID class_id;       /* id of object class */
+	    jint is_array;            /* JVMPI_NORMAL_OBJECT, ... */
+	    jint size;                /* size in number of bytes */
+	    jobjectID obj_id;         /* id assigned to this object */
+        } obj_alloc;
+
+        struct {
+	    jobjectID obj_id;         /* id of the object */
+	} obj_free;
+
+        struct {
+	    jint arena_id;            /* cur arena id */
+	    jobjectID obj_id;         /* cur object id */
+	    jint new_arena_id;        /* new arena id */
+	    jobjectID new_obj_id;     /* new object id */	  
+	} obj_move;
+
+        struct {
+	    jint arena_id;            /* id of arena */
+	    const char *arena_name;   /* name of arena */
+	} new_arena;
+
+        struct {
+	    jint arena_id;            /* id of arena */
+	} delete_arena;
+
+        struct {
+	    char *thread_name;        /* name of thread */
+	    char *group_name;         /* name of group */
+	    char *parent_name;        /* name of parent */
+	    jobjectID thread_id;      /* id of the thread object */
+	    JNIEnv *thread_env_id;
+        } thread_start;
+
+        struct {
+	    int dump_level;           /* level of the heap dump info */
+	    char *begin;              /* where all the root records begin,
+					 please see the heap dump buffer 
+				         format described below */
+	    char *end;                /* where the object records end. */
+	    jint num_traces;          /* number of thread traces, 
+				         0 if dump level = JVMPI_DUMP_LEVEL_0 */
+	    JVMPI_CallTrace *traces;  /* thread traces collected during 
+					 heap dump */ 
+	} heap_dump;
+
+        struct {
+	    jobjectID obj_id;         /* object id */
+	    jobject ref_id;           /* id assigned to the globalref */
+	} jni_globalref_alloc;
+      
+        struct {
+	    jobject ref_id;           /* id of the global ref */
+	} jni_globalref_free;
+
+        struct {
+	    jmethodID method_id;      /* method */
+	} method;
+
+        struct {
+	    jmethodID method_id;      /* id of method */
+	    jobjectID obj_id;         /* id of target object */
+	} method_entry2;
+
+        struct {
+	    jmethodID method_id;        /* id of compiled method */
+	    void *code_addr;            /* code start addr. in memory */
+	    jint code_size;             /* code size */
+	    jint lineno_table_size;     /* size of lineno table */
+	    JVMPI_Lineno *lineno_table; /* lineno info */
+	} compiled_method_load;
+        
+        struct {
+	    jmethodID method_id;        /* id of unloaded compiled method */
+	} compiled_method_unload;
+
+	struct {
+	    jmethodID method_id; /* id of the method the instruction belongs to */
+	    jint offset;         /* instruction offset in the method's bytecode */
+	    union {
+		struct {
+		    jboolean is_true; /* whether true or false branch is taken  */
+		} if_info;
+		struct {
+		    jint key; /* top stack value used as an index */
+		    jint low; /* min value of the index           */
+		    jint hi;  /* max value of the index           */
+		} tableswitch_info;
+		struct {
+		    jint chosen_pair_index; /* actually chosen pair index (0-based)
+                                             * if chosen_pair_index == pairs_total then
+                                             * the 'default' branch is taken
+                                             */
+		    jint pairs_total;       /* total number of lookupswitch pairs */
+		} lookupswitch_info;
+	    } u;
+	} instruction;
+	
+        struct {
+	    char *begin;                /* beginning of dump buffer, 
+					   see below for format */
+	    char *end;                  /* end of dump buffer */
+	    jint num_traces;            /* number of traces */
+	    JVMPI_CallTrace *traces;    /* traces of all threads */
+	    jint *threads_status;       /* status of all threads */
+	} monitor_dump;
+
+        struct {
+	    const char *name;           /* name of raw monitor */
+	    JVMPI_RawMonitor id;        /* id */
+	} raw_monitor;
+
+        struct {
+	    jobjectID object;           /* Java object */
+	} monitor;
+
+        struct {
+	    jobjectID object;           /* Java object */
+	    jlong timeout;              /* timeout period */
+	} monitor_wait;
+
+        struct {
+	    jlong used_objects;
+	    jlong used_object_space;
+	    jlong total_object_space;
+	} gc_info;
+
+        struct {
+	    jint data_len;
+	    char *data;
+	} object_dump;
+    } u;
+} JVMPI_Event;
+
+/* interface functions */
+typedef struct {
+    jint version;   /* JVMPI version */
+    
+    /* ------interface implemented by the profiler------ */
+
+    /**
+     * Function called by the JVM to notify an event. 
+     */
+    void (*NotifyEvent)(JVMPI_Event *event);
+  
+    /* ------interface implemented by the JVM------ */
+    
+    /**
+     * Function called by the profiler to enable/disable/send notification 
+     * for a particular event type.  
+     * 
+     * event_type - event_type
+     * arg - event specific arg
+     *
+     * return JVMPI_NOT_AVAILABLE, JVMPI_SUCCESS or JVMPI_FAIL
+     */
+    jint (*EnableEvent)(jint event_type, void *arg);
+    jint (*DisableEvent)(jint event_type, void *arg);
+    jint (*RequestEvent)(jint event_type, void *arg);
+  
+    /**
+     * Function called by the profiler to get a stack
+     * trace from the JVM.
+     *
+     * trace - trace data structure to be filled
+     * depth - maximum depth of the trace.
+     */
+    void (*GetCallTrace)(JVMPI_CallTrace *trace, jint depth);
+
+    /**
+     * Function called by profiler when it wants to exit/stop.
+     */
+    void (*ProfilerExit)(jint);
+
+    /**
+     * Utility functions provided by the JVM.
+     */
+    JVMPI_RawMonitor (*RawMonitorCreate)(char *lock_name);
+    void (*RawMonitorEnter)(JVMPI_RawMonitor lock_id);
+    void (*RawMonitorExit)(JVMPI_RawMonitor lock_id);
+    void (*RawMonitorWait)(JVMPI_RawMonitor lock_id, jlong ms);
+    void (*RawMonitorNotifyAll)(JVMPI_RawMonitor lock_id);
+    void (*RawMonitorDestroy)(JVMPI_RawMonitor lock_id);
+
+    /**
+     * Function called by the profiler to get the current thread's CPU time.
+     *
+     * return time in nanoseconds;
+     */
+    jlong (*GetCurrentThreadCpuTime)(void);
+
+    void (*SuspendThread)(JNIEnv *env);
+    void (*ResumeThread)(JNIEnv *env);
+    jint (*GetThreadStatus)(JNIEnv *env);
+    jboolean (*ThreadHasRun)(JNIEnv *env);
+
+    /* This function can be called safely only after JVMPI_EVENT_VM_INIT_DONE
+       notification by the JVM. */
+    jint (*CreateSystemThread)(char *name, jint priority, void (*f)(void *));
+
+    /* thread local storage access functions to avoid locking in time 
+       critical functions */
+    void (*SetThreadLocalStorage)(JNIEnv *env_id, void *ptr);
+    void * (*GetThreadLocalStorage)(JNIEnv *env_id);
+
+    /* control GC */
+    void (*DisableGC)(void);
+    void (*EnableGC)(void);
+    void (*RunGC)(void);
+
+    jobjectID (*GetThreadObject)(JNIEnv *env);
+    jobjectID (*GetMethodClass)(jmethodID mid);
+
+    /* JNI <-> jobject conversions */
+    jobject   (*jobjectID2jobject)(jobjectID jid);
+    jobjectID (*jobject2jobjectID)(jobject jobj);
+
+    void (*SuspendThreadList)
+      (jint reqCount, JNIEnv **reqList, jint *results);
+    void (*ResumeThreadList)
+      (jint reqCount, JNIEnv **reqList, jint *results);
+} JVMPI_Interface;
+
+/* type of argument passed to RequestEvent for heap dumps */
+typedef struct {
+    jint heap_dump_level;
+} JVMPI_HeapDumpArg;
+
+/**********************************************************************
+ * Constants and formats used in JVM Profiler Interface.
+ **********************************************************************/
+/*
+ * Event type constants.
+ */
+#define JVMPI_EVENT_METHOD_ENTRY            ((jint)1) 
+#define JVMPI_EVENT_METHOD_ENTRY2           ((jint)2) 
+#define JVMPI_EVENT_METHOD_EXIT             ((jint)3) 
+
+#define JVMPI_EVENT_OBJECT_ALLOC            ((jint)4) 
+#define JVMPI_EVENT_OBJECT_FREE             ((jint)5) 
+#define JVMPI_EVENT_OBJECT_MOVE             ((jint)6) 
+
+#define JVMPI_EVENT_COMPILED_METHOD_LOAD    ((jint)7) 
+#define JVMPI_EVENT_COMPILED_METHOD_UNLOAD  ((jint)8) 
+
+#define JVMPI_EVENT_INSTRUCTION_START       ((jint)9) 
+
+#define JVMPI_EVENT_THREAD_START           ((jint)33) 
+#define JVMPI_EVENT_THREAD_END             ((jint)34) 
+
+#define JVMPI_EVENT_CLASS_LOAD_HOOK        ((jint)35) 
+
+#define JVMPI_EVENT_HEAP_DUMP                     ((jint)37) 
+#define JVMPI_EVENT_JNI_GLOBALREF_ALLOC           ((jint)38) 
+#define JVMPI_EVENT_JNI_GLOBALREF_FREE            ((jint)39) 
+#define JVMPI_EVENT_JNI_WEAK_GLOBALREF_ALLOC      ((jint)40) 
+#define JVMPI_EVENT_JNI_WEAK_GLOBALREF_FREE       ((jint)41) 
+#define JVMPI_EVENT_CLASS_LOAD                    ((jint)42) 
+#define JVMPI_EVENT_CLASS_UNLOAD                  ((jint)43) 
+#define JVMPI_EVENT_DATA_DUMP_REQUEST             ((jint)44) 
+#define JVMPI_EVENT_DATA_RESET_REQUEST            ((jint)45) 
+
+#define JVMPI_EVENT_JVM_INIT_DONE          ((jint)46) 
+#define JVMPI_EVENT_JVM_SHUT_DOWN          ((jint)47) 
+
+#define JVMPI_EVENT_ARENA_NEW              ((jint)48)
+#define JVMPI_EVENT_ARENA_DELETE           ((jint)49)
+
+#define JVMPI_EVENT_OBJECT_DUMP            ((jint)50)
+
+#define JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTER   ((jint)51)
+#define JVMPI_EVENT_RAW_MONITOR_CONTENDED_ENTERED ((jint)52)
+#define JVMPI_EVENT_RAW_MONITOR_CONTENDED_EXIT    ((jint)53)
+#define JVMPI_EVENT_MONITOR_CONTENDED_ENTER       ((jint)54)
+#define JVMPI_EVENT_MONITOR_CONTENDED_ENTERED     ((jint)55)
+#define JVMPI_EVENT_MONITOR_CONTENDED_EXIT        ((jint)56)
+#define JVMPI_EVENT_MONITOR_WAIT                  ((jint)57)
+#define JVMPI_EVENT_MONITOR_WAITED                ((jint)58)
+#define JVMPI_EVENT_MONITOR_DUMP                  ((jint)59)
+
+#define JVMPI_EVENT_GC_START                      ((jint)60)
+#define JVMPI_EVENT_GC_FINISH                     ((jint)61)
+
+#define JVMPI_MAX_EVENT_TYPE_VAL                  ((jint)61)
+
+/* old definitions, to be removed */
+#define JVMPI_EVENT_LOAD_COMPILED_METHOD          ((jint)7) 
+#define JVMPI_EVENT_UNLOAD_COMPILED_METHOD        ((jint)8) 
+#define JVMPI_EVENT_NEW_ARENA                     ((jint)48)
+#define JVMPI_EVENT_DELETE_ARENA                  ((jint)49)
+#define JVMPI_EVENT_DUMP_DATA_REQUEST             ((jint)44) 
+#define JVMPI_EVENT_RESET_DATA_REQUEST            ((jint)45) 
+#define JVMPI_EVENT_OBJ_ALLOC                     ((jint)4) 
+#define JVMPI_EVENT_OBJ_FREE                      ((jint)5) 
+#define JVMPI_EVENT_OBJ_MOVE                      ((jint)6) 
+
+#define JVMPI_REQUESTED_EVENT                     ((jint)0x10000000)
+
+
+ 
+/* 
+ * enabling/disabling event notification.
+ */
+/* results */
+#define JVMPI_SUCCESS                    ((jint)0)
+#define JVMPI_NOT_AVAILABLE              ((jint)1)
+#define JVMPI_FAIL                       ((jint)-1)
+
+/*
+ * Thread status
+ */
+enum {
+    JVMPI_THREAD_RUNNABLE = 1,
+    JVMPI_THREAD_MONITOR_WAIT,
+    JVMPI_THREAD_CONDVAR_WAIT
+};
+
+#define JVMPI_THREAD_SUSPENDED        0x8000
+#define JVMPI_THREAD_INTERRUPTED      0x4000
+
+/*
+ * Thread priority
+ */
+#define JVMPI_MINIMUM_PRIORITY	    1
+#define JVMPI_MAXIMUM_PRIORITY	    10
+#define JVMPI_NORMAL_PRIORITY	    5
+
+/*
+ * Object type constants.
+ */
+#define JVMPI_NORMAL_OBJECT	         ((jint)0)
+#define JVMPI_CLASS		         ((jint)2)
+#define JVMPI_BOOLEAN	                 ((jint)4)
+#define JVMPI_CHAR                       ((jint)5)
+#define JVMPI_FLOAT                      ((jint)6)
+#define JVMPI_DOUBLE                     ((jint)7)
+#define JVMPI_BYTE                       ((jint)8)
+#define JVMPI_SHORT                      ((jint)9)
+#define JVMPI_INT                        ((jint)10)
+#define JVMPI_LONG                       ((jint)11)    
+
+/*
+ * Monitor dump constants.
+ */
+
+#define JVMPI_MONITOR_JAVA          0x01
+#define JVMPI_MONITOR_RAW           0x02
+
+/*
+ * Heap dump constants.
+ */
+#define JVMPI_GC_ROOT_UNKNOWN       0xff
+#define JVMPI_GC_ROOT_JNI_GLOBAL    0x01
+#define JVMPI_GC_ROOT_JNI_LOCAL     0x02
+#define JVMPI_GC_ROOT_JAVA_FRAME    0x03
+#define JVMPI_GC_ROOT_NATIVE_STACK  0x04
+#define JVMPI_GC_ROOT_STICKY_CLASS  0x05
+#define JVMPI_GC_ROOT_THREAD_BLOCK  0x06
+#define JVMPI_GC_ROOT_MONITOR_USED  0x07
+#define JVMPI_GC_ROOT_THREAD_OBJ    0x08
+
+#define JVMPI_GC_CLASS_DUMP         0x20
+#define JVMPI_GC_INSTANCE_DUMP      0x21 
+#define JVMPI_GC_OBJ_ARRAY_DUMP     0x22
+#define JVMPI_GC_PRIM_ARRAY_DUMP    0x23
+
+/*
+ * Dump levels
+ */
+#define JVMPI_DUMP_LEVEL_0    ((jint)0)
+#define JVMPI_DUMP_LEVEL_1    ((jint)1)
+#define JVMPI_DUMP_LEVEL_2    ((jint)2)
+
+/* Types used in dumps -
+ *
+ * u1: 1 byte
+ * u2: 2 bytes
+ * u4: 4 bytes
+ * u8: 8 bytes
+ *
+ * ty: u1 where:
+ *     JVMPI_CLASS:   object
+ *     JVMPI_BOOLEAN: boolean
+ *     JVMPI_CHAR:    char
+ *     JVMPI_FLOAT:   float
+ *     JVMPI_DOUBLE:  double
+ *     JVMPI_BYTE:    byte
+ *     JVMPI_SHORT:   short
+ *     JVMPI_INT:     int
+ *     JVMPI_LONG:    long
+ *
+ * vl: values, exact type depends on the type of the value:
+ *     JVMPI_BOOLEAN & JVMPI_BYTE:   u1
+ *     JVMPI_SHORT & JVMPI_CHAR:     u2
+ *     JVMPI_INT & JVMPI_FLOAT:      u4
+ *     JVMPI_LONG & JVMPI_DOUBLE:    u8
+ *     JVMPI_CLASS:                  jobjectID
+ */
+
+/* Format of the monitor dump buffer:
+ *
+ *               u1                          monitor type
+ *
+ *               JVMPI_MONITOR_JAVA          Java monitor
+ *
+ *                          jobjectID        object
+ *                          JNIEnv *         owner thread
+ *                          u4               entry count
+ *                          u4               # of threads waiting to enter
+ *                          [JNIEnv *]*      threads waiting to enter
+ *                          u4               # of threads waiting to be notified
+ *                          [JNIEnv *]*      threads waiting to be notified
+ *
+ *               JVMPI_MONITOR_RAW           raw monitor
+ *
+ *                          char *           name
+ *                          JVMPI_RawMonitor raw monitor
+ *                          JNIEnv *         owner thread
+ *                          u4               entry count
+ *                          u4               # of threads waiting to enter
+ *                          [JNIEnv *]*      threads waiting to enter
+ *                          u4               # of threads waiting to be notified
+ *                          [JNIEnv *]*      threads waiting to be notified
+ */
+
+/* Format of the heap dump buffer depends on the dump level 
+ * specified in the JVMPI_HeapDumpArg passed to RequestEvent as arg. 
+ * The default is JVMPI_DUMP_LEVEL_2.
+ *
+ * JVMPI_DUMP_LEVEL_0:
+ * 
+ *               u1                          object type (JVMPI_CLASS ...)
+ *               jobjectID                   object
+ *
+ * JVMPI_DUMP_LEVEL_1 and JVMPI_DUMP_LEVEL_2 use the following format:  
+ * In the case of JVMPI_DUMP_LEVEL_1 the values of primitive fields in object 
+ * instance dumps , the values of primitive statics in class dumps and the 
+ * values of primitive arrays are excluded.  JVMPI_DUMP_LEVEL_2 includes the
+ * primitive values.
+ *
+ *               u1                          record type
+ *
+ *               JVMPI_GC_ROOT_UNKNOWN       unknown root
+ *
+ *                          jobjectID        object
+ *
+ *               JVMPI_GC_ROOT_JNI_GLOBAL    JNI global ref root
+ *
+ *                          jobjectID        object
+ *                          jobject          JNI global reference
+ *
+ *               JVMPI_GC_ROOT_JNI_LOCAL     JNI local ref
+ *
+ *                          jobjectID        object
+ *                          JNIEnv *         thread
+ *                          u4               frame # in stack trace (-1 for empty)
+ *
+ *               JVMPI_GC_ROOT_JAVA_FRAME    Java stack frame
+ *
+ *                          jobjectID        object
+ *                          JNIEnv *         thread
+ *                          u4               frame # in stack trace (-1 for empty)
+ *
+ *               JVMPI_GC_ROOT_NATIVE_STACK  Native stack
+ *
+ *                          jobjectID        object
+ *                          JNIEnv *         thread
+ *
+ *               JVMPI_GC_ROOT_STICKY_CLASS  System class
+ *
+ *                          jobjectID        class object
+ *
+ *               JVMPI_GC_ROOT_THREAD_BLOCK  Reference from thread block
+ *
+ *                          jobjectID        thread object
+ *                          JNIEnv *         thread
+ *
+ *               JVMPI_GC_ROOT_MONITOR_USED  Busy monitor
+ *
+ *                          jobjectID        object
+ *
+ *               JVMPI_GC_CLASS_DUMP         dump of a class object
+ *
+ *                          jobjectID        class
+ *                          jobjectID        super
+ *                          jobjectID        class loader
+ *                          jobjectID        signers
+ *                          jobjectID        protection domain
+ *                          jobjectID        class name
+ *                          void *           reserved
+ *
+ *                          u4               instance size (in bytes)
+ *
+ *                          [jobjectID]*     interfaces
+ *
+ *                          u2               size of constant pool
+ *                          [u2,             constant pool index,
+ *                           ty,             type, 
+ *                           vl]*            value
+ *
+ *                          [vl]*            static field values
+ *
+ *               JVMPI_GC_INSTANCE_DUMP      dump of a normal object
+ *
+ *                          jobjectID        object
+ *                          jobjectID        class
+ *                          u4               number of bytes that follow
+ *                          [vl]*            instance field values (class, followed
+ *                                           by super, super's super ...)
+ *
+ *               JVMPI_GC_OBJ_ARRAY_DUMP     dump of an object array
+ *
+ *                          jobjectID        array object
+ *                          u4               number of elements
+ *                          jobjectID        element class
+ *                          [jobjectID]*     elements
+ *
+ *               JVMPI_GC_PRIM_ARRAY_DUMP    dump of a primitive array
+ *
+ *                          jobjectID        array object
+ *                          u4               number of elements
+ *                          ty               element type
+ *                          [vl]*            elements
+ *
+ */
+
+/* Format of the dump received in JVMPI_EVENT_OBJECT_DUMP:
+ * All the records have JVMPI_DUMP_LEVEL_2 information.
+ *
+ *               u1                          record type
+ *
+ *                     followed by a:
+ *
+ *                          JVMPI_GC_CLASS_DUMP,
+ *                          JVMPI_GC_INSTANCE_DUMP,
+ *                          JVMPI_GC_OBJ_ARRAY_DUMP, or
+ *                          JVMPI_GC_PRIM_ARRAY_DUMP record.
+ */
+
+#endif /* !_JAVASOFT_JVMPI_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/jdk1.5.0_10/include/jvmti.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,2181 @@
+#ifdef USE_PRAGMA_IDENT_HDR
+#pragma ident "@(#)jvmtiLib.xsl	1.32 04/06/01 20:19:53 JVM"
+#endif
+/*
+ * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL.  Use is subject to license terms.
+ */
+
+    /* AUTOMATICALLY GENERATED FILE - DO NOT EDIT */
+
+
+    /* Include file for the Java(tm) Virtual Machine Tool Interface */
+
+#ifndef _JAVA_JVMTI_H_
+#define _JAVA_JVMTI_H_
+
+#include "jni.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum {
+    JVMTI_VERSION_1   = 0x30010000,
+    JVMTI_VERSION_1_0 = 0x30010000,
+
+    JVMTI_VERSION = 0x30000000 + (1 * 0x10000) + (0 * 0x100) + 33  /* version: 1.0.33 */
+};
+
+JNIEXPORT jint JNICALL 
+Agent_OnLoad(JavaVM *vm, char *options, void *reserved);
+
+JNIEXPORT void JNICALL 
+Agent_OnUnload(JavaVM *vm);
+
+    /* Forward declaration of the environment */
+        
+struct _jvmtiEnv;
+
+struct jvmtiInterface_1_;
+  
+#ifdef __cplusplus
+typedef _jvmtiEnv jvmtiEnv;
+#else
+typedef const struct jvmtiInterface_1_ *jvmtiEnv;
+#endif /* __cplusplus */
+
+/* Derived Base Types */
+
+typedef jobject jthread;
+typedef jobject jthreadGroup;
+typedef jlong jlocation;
+struct _jrawMonitorID;
+typedef struct _jrawMonitorID *jrawMonitorID;
+typedef struct JNINativeInterface_ jniNativeInterface;
+
+    /* Constants */
+
+
+    /* Thread State Flags */ 
+
+enum {
+    JVMTI_THREAD_STATE_ALIVE = 0x0001,
+    JVMTI_THREAD_STATE_TERMINATED = 0x0002,
+    JVMTI_THREAD_STATE_RUNNABLE = 0x0004,
+    JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER = 0x0400,
+    JVMTI_THREAD_STATE_WAITING = 0x0080,
+    JVMTI_THREAD_STATE_WAITING_INDEFINITELY = 0x0010,
+    JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT = 0x0020,
+    JVMTI_THREAD_STATE_SLEEPING = 0x0040,
+    JVMTI_THREAD_STATE_IN_OBJECT_WAIT = 0x0100,
+    JVMTI_THREAD_STATE_PARKED = 0x0200,
+    JVMTI_THREAD_STATE_SUSPENDED = 0x100000,
+    JVMTI_THREAD_STATE_INTERRUPTED = 0x200000,
+    JVMTI_THREAD_STATE_IN_NATIVE = 0x400000,
+    JVMTI_THREAD_STATE_VENDOR_1 = 0x10000000,
+    JVMTI_THREAD_STATE_VENDOR_2 = 0x20000000,
+    JVMTI_THREAD_STATE_VENDOR_3 = 0x40000000
+};
+
+    /* java.lang.Thread.State Conversion Masks */ 
+
+enum {
+    JVMTI_JAVA_LANG_THREAD_STATE_MASK = JVMTI_THREAD_STATE_TERMINATED | JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_RUNNABLE | JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER | JVMTI_THREAD_STATE_WAITING | JVMTI_THREAD_STATE_WAITING_INDEFINITELY | JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT,
+    JVMTI_JAVA_LANG_THREAD_STATE_NEW = 0,
+    JVMTI_JAVA_LANG_THREAD_STATE_TERMINATED = JVMTI_THREAD_STATE_TERMINATED,
+    JVMTI_JAVA_LANG_THREAD_STATE_RUNNABLE = JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_RUNNABLE,
+    JVMTI_JAVA_LANG_THREAD_STATE_BLOCKED = JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_BLOCKED_ON_MONITOR_ENTER,
+    JVMTI_JAVA_LANG_THREAD_STATE_WAITING = JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_WAITING | JVMTI_THREAD_STATE_WAITING_INDEFINITELY,
+    JVMTI_JAVA_LANG_THREAD_STATE_TIMED_WAITING = JVMTI_THREAD_STATE_ALIVE | JVMTI_THREAD_STATE_WAITING | JVMTI_THREAD_STATE_WAITING_WITH_TIMEOUT
+};
+
+    /* Thread Priority Constants */ 
+
+enum {
+    JVMTI_THREAD_MIN_PRIORITY = 1,
+    JVMTI_THREAD_NORM_PRIORITY = 5,
+    JVMTI_THREAD_MAX_PRIORITY = 10
+};
+
+    /* Heap Object Filter Enumeration */ 
+
+typedef enum {
+    JVMTI_HEAP_OBJECT_TAGGED = 1,
+    JVMTI_HEAP_OBJECT_UNTAGGED = 2,
+    JVMTI_HEAP_OBJECT_EITHER = 3
+} jvmtiHeapObjectFilter;
+
+    /* Heap Root Kind Enumeration */ 
+
+typedef enum {
+    JVMTI_HEAP_ROOT_JNI_GLOBAL = 1,
+    JVMTI_HEAP_ROOT_SYSTEM_CLASS = 2,
+    JVMTI_HEAP_ROOT_MONITOR = 3,
+    JVMTI_HEAP_ROOT_STACK_LOCAL = 4,
+    JVMTI_HEAP_ROOT_JNI_LOCAL = 5,
+    JVMTI_HEAP_ROOT_THREAD = 6,
+    JVMTI_HEAP_ROOT_OTHER = 7
+} jvmtiHeapRootKind;
+
+    /* Object Reference Enumeration */ 
+
+typedef enum {
+    JVMTI_REFERENCE_CLASS = 1,
+    JVMTI_REFERENCE_FIELD = 2,
+    JVMTI_REFERENCE_ARRAY_ELEMENT = 3,
+    JVMTI_REFERENCE_CLASS_LOADER = 4,
+    JVMTI_REFERENCE_SIGNERS = 5,
+    JVMTI_REFERENCE_PROTECTION_DOMAIN = 6,
+    JVMTI_REFERENCE_INTERFACE = 7,
+    JVMTI_REFERENCE_STATIC_FIELD = 8,
+    JVMTI_REFERENCE_CONSTANT_POOL = 9
+} jvmtiObjectReferenceKind;
+
+    /* Iteration Control Enumeration */ 
+
+typedef enum {
+    JVMTI_ITERATION_CONTINUE = 1,
+    JVMTI_ITERATION_IGNORE = 2,
+    JVMTI_ITERATION_ABORT = 0
+} jvmtiIterationControl;
+
+    /* Class Status Flags */ 
+
+enum {
+    JVMTI_CLASS_STATUS_VERIFIED = 1,
+    JVMTI_CLASS_STATUS_PREPARED = 2,
+    JVMTI_CLASS_STATUS_INITIALIZED = 4,
+    JVMTI_CLASS_STATUS_ERROR = 8,
+    JVMTI_CLASS_STATUS_ARRAY = 16,
+    JVMTI_CLASS_STATUS_PRIMITIVE = 32
+};
+
+    /* Event Enable/Disable */ 
+
+typedef enum {
+    JVMTI_ENABLE = 1,
+    JVMTI_DISABLE = 0
+} jvmtiEventMode;
+
+    /* Extension Function/Event Parameter Types */ 
+
+typedef enum {
+    JVMTI_TYPE_JBYTE = 101,
+    JVMTI_TYPE_JCHAR = 102,
+    JVMTI_TYPE_JSHORT = 103,
+    JVMTI_TYPE_JINT = 104,
+    JVMTI_TYPE_JLONG = 105,
+    JVMTI_TYPE_JFLOAT = 106,
+    JVMTI_TYPE_JDOUBLE = 107,
+    JVMTI_TYPE_JBOOLEAN = 108,
+    JVMTI_TYPE_JOBJECT = 109,
+    JVMTI_TYPE_JTHREAD = 110,
+    JVMTI_TYPE_JCLASS = 111,
+    JVMTI_TYPE_JVALUE = 112,
+    JVMTI_TYPE_JFIELDID = 113,
+    JVMTI_TYPE_JMETHODID = 114,
+    JVMTI_TYPE_CCHAR = 115,
+    JVMTI_TYPE_CVOID = 116,
+    JVMTI_TYPE_JNIENV = 117
+} jvmtiParamTypes;
+
+    /* Extension Function/Event Parameter Kinds */ 
+
+typedef enum {
+    JVMTI_KIND_IN = 91,
+    JVMTI_KIND_IN_PTR = 92,
+    JVMTI_KIND_IN_BUF = 93,
+    JVMTI_KIND_ALLOC_BUF = 94,
+    JVMTI_KIND_ALLOC_ALLOC_BUF = 95,
+    JVMTI_KIND_OUT = 96,
+    JVMTI_KIND_OUT_BUF = 97
+} jvmtiParamKind;
+
+    /* Timer Kinds */ 
+
+typedef enum {
+    JVMTI_TIMER_USER_CPU = 30,
+    JVMTI_TIMER_TOTAL_CPU = 31,
+    JVMTI_TIMER_ELAPSED = 32
+} jvmtiTimerKind;
+
+    /* Phases of execution */ 
+
+typedef enum {
+    JVMTI_PHASE_ONLOAD = 1,
+    JVMTI_PHASE_PRIMORDIAL = 2,
+    JVMTI_PHASE_START = 6,
+    JVMTI_PHASE_LIVE = 4,
+    JVMTI_PHASE_DEAD = 8
+} jvmtiPhase;
+
+    /* Version Interface Types */ 
+
+enum {
+    JVMTI_VERSION_INTERFACE_JNI = 0x00000000,
+    JVMTI_VERSION_INTERFACE_JVMTI = 0x30000000
+};
+
+    /* Version Masks */ 
+
+enum {
+    JVMTI_VERSION_MASK_INTERFACE_TYPE = 0x70000000,
+    JVMTI_VERSION_MASK_MAJOR = 0x0FFF0000,
+    JVMTI_VERSION_MASK_MINOR = 0x0000FF00,
+    JVMTI_VERSION_MASK_MICRO = 0x000000FF
+};
+
+    /* Version Shifts */ 
+
+enum {
+    JVMTI_VERSION_SHIFT_MAJOR = 16,
+    JVMTI_VERSION_SHIFT_MINOR = 8,
+    JVMTI_VERSION_SHIFT_MICRO = 0
+};
+
+    /* Verbose Flag Enumeration */ 
+
+typedef enum {
+    JVMTI_VERBOSE_OTHER = 0,
+    JVMTI_VERBOSE_GC = 1,
+    JVMTI_VERBOSE_CLASS = 2,
+    JVMTI_VERBOSE_JNI = 4
+} jvmtiVerboseFlag;
+
+    /* JLocation Format Enumeration */ 
+
+typedef enum {
+    JVMTI_JLOCATION_JVMBCI = 1,
+    JVMTI_JLOCATION_MACHINEPC = 2,
+    JVMTI_JLOCATION_OTHER = 0
+} jvmtiJlocationFormat;
+
+    /* Errors */
+
+typedef enum {
+    JVMTI_ERROR_NONE = 0,
+    JVMTI_ERROR_INVALID_THREAD = 10,
+    JVMTI_ERROR_INVALID_THREAD_GROUP = 11,
+    JVMTI_ERROR_INVALID_PRIORITY = 12,
+    JVMTI_ERROR_THREAD_NOT_SUSPENDED = 13,
+    JVMTI_ERROR_THREAD_SUSPENDED = 14,
+    JVMTI_ERROR_THREAD_NOT_ALIVE = 15,
+    JVMTI_ERROR_INVALID_OBJECT = 20,
+    JVMTI_ERROR_INVALID_CLASS = 21,
+    JVMTI_ERROR_CLASS_NOT_PREPARED = 22,
+    JVMTI_ERROR_INVALID_METHODID = 23,
+    JVMTI_ERROR_INVALID_LOCATION = 24,
+    JVMTI_ERROR_INVALID_FIELDID = 25,
+    JVMTI_ERROR_NO_MORE_FRAMES = 31,
+    JVMTI_ERROR_OPAQUE_FRAME = 32,
+    JVMTI_ERROR_TYPE_MISMATCH = 34,
+    JVMTI_ERROR_INVALID_SLOT = 35,
+    JVMTI_ERROR_DUPLICATE = 40,
+    JVMTI_ERROR_NOT_FOUND = 41,
+    JVMTI_ERROR_INVALID_MONITOR = 50,
+    JVMTI_ERROR_NOT_MONITOR_OWNER = 51,
+    JVMTI_ERROR_INTERRUPT = 52,
+    JVMTI_ERROR_INVALID_CLASS_FORMAT = 60,
+    JVMTI_ERROR_CIRCULAR_CLASS_DEFINITION = 61,
+    JVMTI_ERROR_FAILS_VERIFICATION = 62,
+    JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_ADDED = 63,
+    JVMTI_ERROR_UNSUPPORTED_REDEFINITION_SCHEMA_CHANGED = 64,
+    JVMTI_ERROR_INVALID_TYPESTATE = 65,
+    JVMTI_ERROR_UNSUPPORTED_REDEFINITION_HIERARCHY_CHANGED = 66,
+    JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_DELETED = 67,
+    JVMTI_ERROR_UNSUPPORTED_VERSION = 68,
+    JVMTI_ERROR_NAMES_DONT_MATCH = 69,
+    JVMTI_ERROR_UNSUPPORTED_REDEFINITION_CLASS_MODIFIERS_CHANGED = 70,
+    JVMTI_ERROR_UNSUPPORTED_REDEFINITION_METHOD_MODIFIERS_CHANGED = 71,
+    JVMTI_ERROR_UNMODIFIABLE_CLASS = 79,
+    JVMTI_ERROR_NOT_AVAILABLE = 98,
+    JVMTI_ERROR_MUST_POSSESS_CAPABILITY = 99,
+    JVMTI_ERROR_NULL_POINTER = 100,
+    JVMTI_ERROR_ABSENT_INFORMATION = 101,
+    JVMTI_ERROR_INVALID_EVENT_TYPE = 102,
+    JVMTI_ERROR_ILLEGAL_ARGUMENT = 103,
+    JVMTI_ERROR_NATIVE_METHOD = 104,
+    JVMTI_ERROR_OUT_OF_MEMORY = 110,
+    JVMTI_ERROR_ACCESS_DENIED = 111,
+    JVMTI_ERROR_WRONG_PHASE = 112,
+    JVMTI_ERROR_INTERNAL = 113,
+    JVMTI_ERROR_UNATTACHED_THREAD = 115,
+    JVMTI_ERROR_INVALID_ENVIRONMENT = 116,
+    JVMTI_ERROR_MAX = 116
+} jvmtiError;
+
+    /* Event IDs */
+
+typedef enum {
+    JVMTI_MIN_EVENT_TYPE_VAL = 50,
+    JVMTI_EVENT_VM_INIT = 50,
+    JVMTI_EVENT_VM_DEATH = 51,
+    JVMTI_EVENT_THREAD_START = 52,
+    JVMTI_EVENT_THREAD_END = 53,
+    JVMTI_EVENT_CLASS_FILE_LOAD_HOOK = 54,
+    JVMTI_EVENT_CLASS_LOAD = 55,
+    JVMTI_EVENT_CLASS_PREPARE = 56,
+    JVMTI_EVENT_VM_START = 57,
+    JVMTI_EVENT_EXCEPTION = 58,
+    JVMTI_EVENT_EXCEPTION_CATCH = 59,
+    JVMTI_EVENT_SINGLE_STEP = 60,
+    JVMTI_EVENT_FRAME_POP = 61,
+    JVMTI_EVENT_BREAKPOINT = 62,
+    JVMTI_EVENT_FIELD_ACCESS = 63,
+    JVMTI_EVENT_FIELD_MODIFICATION = 64,
+    JVMTI_EVENT_METHOD_ENTRY = 65,
+    JVMTI_EVENT_METHOD_EXIT = 66,
+    JVMTI_EVENT_NATIVE_METHOD_BIND = 67,
+    JVMTI_EVENT_COMPILED_METHOD_LOAD = 68,
+    JVMTI_EVENT_COMPILED_METHOD_UNLOAD = 69,
+    JVMTI_EVENT_DYNAMIC_CODE_GENERATED = 70,
+    JVMTI_EVENT_DATA_DUMP_REQUEST = 71,
+    JVMTI_EVENT_MONITOR_WAIT = 73,
+    JVMTI_EVENT_MONITOR_WAITED = 74,
+    JVMTI_EVENT_MONITOR_CONTENDED_ENTER = 75,
+    JVMTI_EVENT_MONITOR_CONTENDED_ENTERED = 76,
+    JVMTI_EVENT_GARBAGE_COLLECTION_START = 81,
+    JVMTI_EVENT_GARBAGE_COLLECTION_FINISH = 82,
+    JVMTI_EVENT_OBJECT_FREE = 83,
+    JVMTI_EVENT_VM_OBJECT_ALLOC = 84,
+    JVMTI_MAX_EVENT_TYPE_VAL = 84
+} jvmtiEvent;
+
+
+    /* Function Types */
+
+typedef void (JNICALL *jvmtiStartFunction)
+    (jvmtiEnv* jvmti_env, JNIEnv* jni_env, void* arg);
+
+typedef jvmtiIterationControl (JNICALL *jvmtiHeapObjectCallback)
+    (jlong class_tag, jlong size, jlong* tag_ptr, void* user_data);
+
+typedef jvmtiIterationControl (JNICALL *jvmtiHeapRootCallback)
+    (jvmtiHeapRootKind root_kind, jlong class_tag, jlong size, jlong* tag_ptr, void* user_data);
+
+typedef jvmtiIterationControl (JNICALL *jvmtiStackReferenceCallback)
+    (jvmtiHeapRootKind root_kind, jlong class_tag, jlong size, jlong* tag_ptr, jlong thread_tag, jint depth, jmethodID method, jint slot, void* user_data);
+
+typedef jvmtiIterationControl (JNICALL *jvmtiObjectReferenceCallback)
+    (jvmtiObjectReferenceKind reference_kind, jlong class_tag, jlong size, jlong* tag_ptr, jlong referrer_tag, jint referrer_index, void* user_data);
+
+typedef jvmtiError (JNICALL *jvmtiExtensionFunction)
+    (jvmtiEnv* jvmti_env,  ...);
+
+typedef void (JNICALL *jvmtiExtensionEvent)
+    (jvmtiEnv* jvmti_env,  ...);
+
+
+    /* Structure Types */
+
+typedef struct {
+    char* name;
+    jint priority;
+    jboolean is_daemon;
+    jthreadGroup thread_group;
+    jobject context_class_loader;
+} jvmtiThreadInfo;
+
+typedef struct {
+    jthreadGroup parent;
+    char* name;
+    jint max_priority;
+    jboolean is_daemon;
+} jvmtiThreadGroupInfo;
+
+typedef struct {
+    jmethodID method;
+    jlocation location;
+} jvmtiFrameInfo;
+
+typedef struct {
+    jthread thread;
+    jint state;
+    jvmtiFrameInfo* frame_buffer;
+    jint frame_count;
+} jvmtiStackInfo;
+
+typedef struct {
+    jclass klass;
+    jint class_byte_count;
+    const unsigned char* class_bytes;
+} jvmtiClassDefinition;
+
+typedef struct {
+    jthread owner;
+    jint entry_count;
+    jint waiter_count;
+    jthread* waiters;
+    jint notify_waiter_count;
+    jthread* notify_waiters;
+} jvmtiMonitorUsage;
+
+typedef struct {
+    jlocation start_location;
+    jint line_number;
+} jvmtiLineNumberEntry;
+
+typedef struct {
+    jlocation start_location;
+    jint length;
+    char* name;
+    char* signature;
+    char* generic_signature;
+    jint slot;
+} jvmtiLocalVariableEntry;
+
+typedef struct {
+    char* name;
+    jvmtiParamKind kind;
+    jvmtiParamTypes base_type;
+    jboolean null_ok;
+} jvmtiParamInfo;
+
+typedef struct {
+    jvmtiExtensionFunction func;
+    char* id;
+    char* short_description;
+    jint param_count;
+    jvmtiParamInfo* params;
+    jint error_count;
+    jvmtiError* errors;
+} jvmtiExtensionFunctionInfo;
+
+typedef struct {
+    jint extension_event_index;
+    char* id;
+    char* short_description;
+    jint param_count;
+    jvmtiParamInfo* params;
+} jvmtiExtensionEventInfo;
+
+typedef struct {
+    jlong max_value;
+    jboolean may_skip_forward;
+    jboolean may_skip_backward;
+    jvmtiTimerKind kind;
+    jlong reserved1;
+    jlong reserved2;
+} jvmtiTimerInfo;
+
+typedef struct {
+    const void* start_address;
+    jlocation location;
+} jvmtiAddrLocationMap;
+
+typedef struct {
+    unsigned int can_tag_objects : 1;
+    unsigned int can_generate_field_modification_events : 1;
+    unsigned int can_generate_field_access_events : 1;
+    unsigned int can_get_bytecodes : 1;
+    unsigned int can_get_synthetic_attribute : 1;
+    unsigned int can_get_owned_monitor_info : 1;
+    unsigned int can_get_current_contended_monitor : 1;
+    unsigned int can_get_monitor_info : 1;
+    unsigned int can_pop_frame : 1;
+    unsigned int can_redefine_classes : 1;
+    unsigned int can_signal_thread : 1;
+    unsigned int can_get_source_file_name : 1;
+    unsigned int can_get_line_numbers : 1;
+    unsigned int can_get_source_debug_extension : 1;
+    unsigned int can_access_local_variables : 1;
+    unsigned int can_maintain_original_method_order : 1;
+    unsigned int can_generate_single_step_events : 1;
+    unsigned int can_generate_exception_events : 1;
+    unsigned int can_generate_frame_pop_events : 1;
+    unsigned int can_generate_breakpoint_events : 1;
+    unsigned int can_suspend : 1;
+    unsigned int can_redefine_any_class : 1;
+    unsigned int can_get_current_thread_cpu_time : 1;
+    unsigned int can_get_thread_cpu_time : 1;
+    unsigned int can_generate_method_entry_events : 1;
+    unsigned int can_generate_method_exit_events : 1;
+    unsigned int can_generate_all_class_hook_events : 1;
+    unsigned int can_generate_compiled_method_load_events : 1;
+    unsigned int can_generate_monitor_events : 1;
+    unsigned int can_generate_vm_object_alloc_events : 1;
+    unsigned int can_generate_native_method_bind_events : 1;
+    unsigned int can_generate_garbage_collection_events : 1;
+    unsigned int can_generate_object_free_events : 1;
+    unsigned int : 15;
+    unsigned int : 16;
+    unsigned int : 16;
+    unsigned int : 16;
+    unsigned int : 16;
+    unsigned int : 16;
+} jvmtiCapabilities;
+
+
+    /* Event Definitions */
+
+typedef void (JNICALL *jvmtiEventReserved)(void);
+
+
+typedef void (JNICALL *jvmtiEventBreakpoint)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jmethodID method, 
+     jlocation location);
+
+typedef void (JNICALL *jvmtiEventClassFileLoadHook)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jclass class_being_redefined, 
+     jobject loader, 
+     const char* name, 
+     jobject protection_domain, 
+     jint class_data_len, 
+     const unsigned char* class_data, 
+     jint* new_class_data_len, 
+     unsigned char** new_class_data);
+
+typedef void (JNICALL *jvmtiEventClassLoad)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jclass klass);
+
+typedef void (JNICALL *jvmtiEventClassPrepare)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jclass klass);
+
+typedef void (JNICALL *jvmtiEventCompiledMethodLoad)
+    (jvmtiEnv *jvmti_env, 
+     jmethodID method, 
+     jint code_size, 
+     const void* code_addr, 
+     jint map_length, 
+     const jvmtiAddrLocationMap* map, 
+     const void* compile_info);
+
+typedef void (JNICALL *jvmtiEventCompiledMethodUnload)
+    (jvmtiEnv *jvmti_env, 
+     jmethodID method, 
+     const void* code_addr);
+
+typedef void (JNICALL *jvmtiEventDataDumpRequest)
+    (jvmtiEnv *jvmti_env);
+
+typedef void (JNICALL *jvmtiEventDynamicCodeGenerated)
+    (jvmtiEnv *jvmti_env, 
+     const char* name, 
+     const void* address, 
+     jint length);
+
+typedef void (JNICALL *jvmtiEventException)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jmethodID method, 
+     jlocation location, 
+     jobject exception, 
+     jmethodID catch_method, 
+     jlocation catch_location);
+
+typedef void (JNICALL *jvmtiEventExceptionCatch)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jmethodID method, 
+     jlocation location, 
+     jobject exception);
+
+typedef void (JNICALL *jvmtiEventFieldAccess)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jmethodID method, 
+     jlocation location, 
+     jclass field_klass, 
+     jobject object, 
+     jfieldID field);
+
+typedef void (JNICALL *jvmtiEventFieldModification)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jmethodID method, 
+     jlocation location, 
+     jclass field_klass, 
+     jobject object, 
+     jfieldID field, 
+     char signature_type, 
+     jvalue new_value);
+
+typedef void (JNICALL *jvmtiEventFramePop)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jmethodID method, 
+     jboolean was_popped_by_exception);
+
+typedef void (JNICALL *jvmtiEventGarbageCollectionFinish)
+    (jvmtiEnv *jvmti_env);
+
+typedef void (JNICALL *jvmtiEventGarbageCollectionStart)
+    (jvmtiEnv *jvmti_env);
+
+typedef void (JNICALL *jvmtiEventMethodEntry)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jmethodID method);
+
+typedef void (JNICALL *jvmtiEventMethodExit)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jmethodID method, 
+     jboolean was_popped_by_exception, 
+     jvalue return_value);
+
+typedef void (JNICALL *jvmtiEventMonitorContendedEnter)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jobject object);
+
+typedef void (JNICALL *jvmtiEventMonitorContendedEntered)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jobject object);
+
+typedef void (JNICALL *jvmtiEventMonitorWait)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jobject object, 
+     jlong timeout);
+
+typedef void (JNICALL *jvmtiEventMonitorWaited)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jobject object, 
+     jboolean timed_out);
+
+typedef void (JNICALL *jvmtiEventNativeMethodBind)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jmethodID method, 
+     void* address, 
+     void** new_address_ptr);
+
+typedef void (JNICALL *jvmtiEventObjectFree)
+    (jvmtiEnv *jvmti_env, 
+     jlong tag);
+
+typedef void (JNICALL *jvmtiEventSingleStep)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jmethodID method, 
+     jlocation location);
+
+typedef void (JNICALL *jvmtiEventThreadEnd)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread);
+
+typedef void (JNICALL *jvmtiEventThreadStart)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread);
+
+typedef void (JNICALL *jvmtiEventVMDeath)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env);
+
+typedef void (JNICALL *jvmtiEventVMInit)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread);
+
+typedef void (JNICALL *jvmtiEventVMObjectAlloc)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env, 
+     jthread thread, 
+     jobject object, 
+     jclass object_klass, 
+     jlong size);
+
+typedef void (JNICALL *jvmtiEventVMStart)
+    (jvmtiEnv *jvmti_env, 
+     JNIEnv* jni_env);
+
+    /* Event Callback Structure */
+
+typedef struct {
+                              /*   50 : VM Initialization Event */
+    jvmtiEventVMInit VMInit;
+                              /*   51 : VM Death Event */
+    jvmtiEventVMDeath VMDeath;
+                              /*   52 : Thread Start */
+    jvmtiEventThreadStart ThreadStart;
+                              /*   53 : Thread End */
+    jvmtiEventThreadEnd ThreadEnd;
+                              /*   54 : Class File Load Hook */
+    jvmtiEventClassFileLoadHook ClassFileLoadHook;
+                              /*   55 : Class Load */
+    jvmtiEventClassLoad ClassLoad;
+                              /*   56 : Class Prepare */
+    jvmtiEventClassPrepare ClassPrepare;
+                              /*   57 : VM Start Event */
+    jvmtiEventVMStart VMStart;
+                              /*   58 : Exception */
+    jvmtiEventException Exception;
+                              /*   59 : Exception Catch */
+    jvmtiEventExceptionCatch ExceptionCatch;
+                              /*   60 : Single Step */
+    jvmtiEventSingleStep SingleStep;
+                              /*   61 : Frame Pop */
+    jvmtiEventFramePop FramePop;
+                              /*   62 : Breakpoint */
+    jvmtiEventBreakpoint Breakpoint;
+                              /*   63 : Field Access */
+    jvmtiEventFieldAccess FieldAccess;
+                              /*   64 : Field Modification */
+    jvmtiEventFieldModification FieldModification;
+                              /*   65 : Method Entry */
+    jvmtiEventMethodEntry MethodEntry;
+                              /*   66 : Method Exit */
+    jvmtiEventMethodExit MethodExit;
+                              /*   67 : Native Method Bind */
+    jvmtiEventNativeMethodBind NativeMethodBind;
+                              /*   68 : Compiled Method Load */
+    jvmtiEventCompiledMethodLoad CompiledMethodLoad;
+                              /*   69 : Compiled Method Unload */
+    jvmtiEventCompiledMethodUnload CompiledMethodUnload;
+                              /*   70 : Dynamic Code Generated */
+    jvmtiEventDynamicCodeGenerated DynamicCodeGenerated;
+                              /*   71 : Data Dump Request */
+    jvmtiEventDataDumpRequest DataDumpRequest;
+                              /*   72 */
+    jvmtiEventReserved reserved72;
+                              /*   73 : Monitor Wait */
+    jvmtiEventMonitorWait MonitorWait;
+                              /*   74 : Monitor Waited */
+    jvmtiEventMonitorWaited MonitorWaited;
+                              /*   75 : Monitor Contended Enter */
+    jvmtiEventMonitorContendedEnter MonitorContendedEnter;
+                              /*   76 : Monitor Contended Entered */
+    jvmtiEventMonitorContendedEntered MonitorContendedEntered;
+                              /*   77 */
+    jvmtiEventReserved reserved77;
+                              /*   78 */
+    jvmtiEventReserved reserved78;
+                              /*   79 */
+    jvmtiEventReserved reserved79;
+                              /*   80 */
+    jvmtiEventReserved reserved80;
+                              /*   81 : Garbage Collection Start */
+    jvmtiEventGarbageCollectionStart GarbageCollectionStart;
+                              /*   82 : Garbage Collection Finish */
+    jvmtiEventGarbageCollectionFinish GarbageCollectionFinish;
+                              /*   83 : Object Free */
+    jvmtiEventObjectFree ObjectFree;
+                              /*   84 : VM Object Allocation */
+    jvmtiEventVMObjectAlloc VMObjectAlloc;
+} jvmtiEventCallbacks;
+
+
+    /* Function Interface */
+    
+typedef struct jvmtiInterface_1_ {
+
+  /*   1 :  RESERVED */
+  void *reserved1;
+
+  /*   2 : Set Event Notification Mode */
+  jvmtiError (JNICALL *SetEventNotificationMode) (jvmtiEnv* env, 
+    jvmtiEventMode mode, 
+    jvmtiEvent event_type, 
+    jthread event_thread, 
+     ...);
+
+  /*   3 :  RESERVED */
+  void *reserved3;
+
+  /*   4 : Get All Threads */
+  jvmtiError (JNICALL *GetAllThreads) (jvmtiEnv* env, 
+    jint* threads_count_ptr, 
+    jthread** threads_ptr);
+
+  /*   5 : Suspend Thread */
+  jvmtiError (JNICALL *SuspendThread) (jvmtiEnv* env, 
+    jthread thread);
+
+  /*   6 : Resume Thread */
+  jvmtiError (JNICALL *ResumeThread) (jvmtiEnv* env, 
+    jthread thread);
+
+  /*   7 : Stop Thread */
+  jvmtiError (JNICALL *StopThread) (jvmtiEnv* env, 
+    jthread thread, 
+    jobject exception);
+
+  /*   8 : Interrupt Thread */
+  jvmtiError (JNICALL *InterruptThread) (jvmtiEnv* env, 
+    jthread thread);
+
+  /*   9 : Get Thread Info */
+  jvmtiError (JNICALL *GetThreadInfo) (jvmtiEnv* env, 
+    jthread thread, 
+    jvmtiThreadInfo* info_ptr);
+
+  /*   10 : Get Owned Monitor Info */
+  jvmtiError (JNICALL *GetOwnedMonitorInfo) (jvmtiEnv* env, 
+    jthread thread, 
+    jint* owned_monitor_count_ptr, 
+    jobject** owned_monitors_ptr);
+
+  /*   11 : Get Current Contended Monitor */
+  jvmtiError (JNICALL *GetCurrentContendedMonitor) (jvmtiEnv* env, 
+    jthread thread, 
+    jobject* monitor_ptr);
+
+  /*   12 : Run Agent Thread */
+  jvmtiError (JNICALL *RunAgentThread) (jvmtiEnv* env, 
+    jthread thread, 
+    jvmtiStartFunction proc, 
+    const void* arg, 
+    jint priority);
+
+  /*   13 : Get Top Thread Groups */
+  jvmtiError (JNICALL *GetTopThreadGroups) (jvmtiEnv* env, 
+    jint* group_count_ptr, 
+    jthreadGroup** groups_ptr);
+
+  /*   14 : Get Thread Group Info */
+  jvmtiError (JNICALL *GetThreadGroupInfo) (jvmtiEnv* env, 
+    jthreadGroup group, 
+    jvmtiThreadGroupInfo* info_ptr);
+
+  /*   15 : Get Thread Group Children */
+  jvmtiError (JNICALL *GetThreadGroupChildren) (jvmtiEnv* env, 
+    jthreadGroup group, 
+    jint* thread_count_ptr, 
+    jthread** threads_ptr, 
+    jint* group_count_ptr, 
+    jthreadGroup** groups_ptr);
+
+  /*   16 : Get Frame Count */
+  jvmtiError (JNICALL *GetFrameCount) (jvmtiEnv* env, 
+    jthread thread, 
+    jint* count_ptr);
+
+  /*   17 : Get Thread State */
+  jvmtiError (JNICALL *GetThreadState) (jvmtiEnv* env, 
+    jthread thread, 
+    jint* thread_state_ptr);
+
+  /*   18 :  RESERVED */
+  void *reserved18;
+
+  /*   19 : Get Frame Location */
+  jvmtiError (JNICALL *GetFrameLocation) (jvmtiEnv* env, 
+    jthread thread, 
+    jint depth, 
+    jmethodID* method_ptr, 
+    jlocation* location_ptr);
+
+  /*   20 : Notify Frame Pop */
+  jvmtiError (JNICALL *NotifyFramePop) (jvmtiEnv* env, 
+    jthread thread, 
+    jint depth);
+
+  /*   21 : Get Local Variable - Object */
+  jvmtiError (JNICALL *GetLocalObject) (jvmtiEnv* env, 
+    jthread thread, 
+    jint depth, 
+    jint slot, 
+    jobject* value_ptr);
+
+  /*   22 : Get Local Variable - Int */
+  jvmtiError (JNICALL *GetLocalInt) (jvmtiEnv* env, 
+    jthread thread, 
+    jint depth, 
+    jint slot, 
+    jint* value_ptr);
+
+  /*   23 : Get Local Variable - Long */
+  jvmtiError (JNICALL *GetLocalLong) (jvmtiEnv* env, 
+    jthread thread, 
+    jint depth, 
+    jint slot, 
+    jlong* value_ptr);
+
+  /*   24 : Get Local Variable - Float */
+  jvmtiError (JNICALL *GetLocalFloat) (jvmtiEnv* env, 
+    jthread thread, 
+    jint depth, 
+    jint slot, 
+    jfloat* value_ptr);
+
+  /*   25 : Get Local Variable - Double */
+  jvmtiError (JNICALL *GetLocalDouble) (jvmtiEnv* env, 
+    jthread thread, 
+    jint depth, 
+    jint slot, 
+    jdouble* value_ptr);
+
+  /*   26 : Set Local Variable - Object */
+  jvmtiError (JNICALL *SetLocalObject) (jvmtiEnv* env, 
+    jthread thread, 
+    jint depth, 
+    jint slot, 
+    jobject value);
+
+  /*   27 : Set Local Variable - Int */
+  jvmtiError (JNICALL *SetLocalInt) (jvmtiEnv* env, 
+    jthread thread, 
+    jint depth, 
+    jint slot, 
+    jint value);
+
+  /*   28 : Set Local Variable - Long */
+  jvmtiError (JNICALL *SetLocalLong) (jvmtiEnv* env, 
+    jthread thread, 
+    jint depth, 
+    jint slot, 
+    jlong value);
+
+  /*   29 : Set Local Variable - Float */
+  jvmtiError (JNICALL *SetLocalFloat) (jvmtiEnv* env, 
+    jthread thread, 
+    jint depth, 
+    jint slot, 
+    jfloat value);
+
+  /*   30 : Set Local Variable - Double */
+  jvmtiError (JNICALL *SetLocalDouble) (jvmtiEnv* env, 
+    jthread thread, 
+    jint depth, 
+    jint slot, 
+    jdouble value);
+
+  /*   31 : Create Raw Monitor */
+  jvmtiError (JNICALL *CreateRawMonitor) (jvmtiEnv* env, 
+    const char* name, 
+    jrawMonitorID* monitor_ptr);
+
+  /*   32 : Destroy Raw Monitor */
+  jvmtiError (JNICALL *DestroyRawMonitor) (jvmtiEnv* env, 
+    jrawMonitorID monitor);
+
+  /*   33 : Raw Monitor Enter */
+  jvmtiError (JNICALL *RawMonitorEnter) (jvmtiEnv* env, 
+    jrawMonitorID monitor);
+
+  /*   34 : Raw Monitor Exit */
+  jvmtiError (JNICALL *RawMonitorExit) (jvmtiEnv* env, 
+    jrawMonitorID monitor);
+
+  /*   35 : Raw Monitor Wait */
+  jvmtiError (JNICALL *RawMonitorWait) (jvmtiEnv* env, 
+    jrawMonitorID monitor, 
+    jlong millis);
+
+  /*   36 : Raw Monitor Notify */
+  jvmtiError (JNICALL *RawMonitorNotify) (jvmtiEnv* env, 
+    jrawMonitorID monitor);
+
+  /*   37 : Raw Monitor Notify All */
+  jvmtiError (JNICALL *RawMonitorNotifyAll) (jvmtiEnv* env, 
+    jrawMonitorID monitor);
+
+  /*   38 : Set Breakpoint */
+  jvmtiError (JNICALL *SetBreakpoint) (jvmtiEnv* env, 
+    jmethodID method, 
+    jlocation location);
+
+  /*   39 : Clear Breakpoint */
+  jvmtiError (JNICALL *ClearBreakpoint) (jvmtiEnv* env, 
+    jmethodID method, 
+    jlocation location);
+
+  /*   40 :  RESERVED */
+  void *reserved40;
+
+  /*   41 : Set Field Access Watch */
+  jvmtiError (JNICALL *SetFieldAccessWatch) (jvmtiEnv* env, 
+    jclass klass, 
+    jfieldID field);
+
+  /*   42 : Clear Field Access Watch */
+  jvmtiError (JNICALL *ClearFieldAccessWatch) (jvmtiEnv* env, 
+    jclass klass, 
+    jfieldID field);
+
+  /*   43 : Set Field Modification Watch */
+  jvmtiError (JNICALL *SetFieldModificationWatch) (jvmtiEnv* env, 
+    jclass klass, 
+    jfieldID field);
+
+  /*   44 : Clear Field Modification Watch */
+  jvmtiError (JNICALL *ClearFieldModificationWatch) (jvmtiEnv* env, 
+    jclass klass, 
+    jfieldID field);
+
+  /*   45 :  RESERVED */
+  void *reserved45;
+
+  /*   46 : Allocate */
+  jvmtiError (JNICALL *Allocate) (jvmtiEnv* env, 
+    jlong size, 
+    unsigned char** mem_ptr);
+
+  /*   47 : Deallocate */
+  jvmtiError (JNICALL *Deallocate) (jvmtiEnv* env, 
+    unsigned char* mem);
+
+  /*   48 : Get Class Signature */
+  jvmtiError (JNICALL *GetClassSignature) (jvmtiEnv* env, 
+    jclass klass, 
+    char** signature_ptr, 
+    char** generic_ptr);
+
+  /*   49 : Get Class Status */
+  jvmtiError (JNICALL *GetClassStatus) (jvmtiEnv* env, 
+    jclass klass, 
+    jint* status_ptr);
+
+  /*   50 : Get Source File Name */
+  jvmtiError (JNICALL *GetSourceFileName) (jvmtiEnv* env, 
+    jclass klass, 
+    char** source_name_ptr);
+
+  /*   51 : Get Class Modifiers */
+  jvmtiError (JNICALL *GetClassModifiers) (jvmtiEnv* env, 
+    jclass klass, 
+    jint* modifiers_ptr);
+
+  /*   52 : Get Class Methods */
+  jvmtiError (JNICALL *GetClassMethods) (jvmtiEnv* env, 
+    jclass klass, 
+    jint* method_count_ptr, 
+    jmethodID** methods_ptr);
+
+  /*   53 : Get Class Fields */
+  jvmtiError (JNICALL *GetClassFields) (jvmtiEnv* env, 
+    jclass klass, 
+    jint* field_count_ptr, 
+    jfieldID** fields_ptr);
+
+  /*   54 : Get Implemented Interfaces */
+  jvmtiError (JNICALL *GetImplementedInterfaces) (jvmtiEnv* env, 
+    jclass klass, 
+    jint* interface_count_ptr, 
+    jclass** interfaces_ptr);
+
+  /*   55 : Is Interface */
+  jvmtiError (JNICALL *IsInterface) (jvmtiEnv* env, 
+    jclass klass, 
+    jboolean* is_interface_ptr);
+
+  /*   56 : Is Array Class */
+  jvmtiError (JNICALL *IsArrayClass) (jvmtiEnv* env, 
+    jclass klass, 
+    jboolean* is_array_class_ptr);
+
+  /*   57 : Get Class Loader */
+  jvmtiError (JNICALL *GetClassLoader) (jvmtiEnv* env, 
+    jclass klass, 
+    jobject* classloader_ptr);
+
+  /*   58 : Get Object Hash Code */
+  jvmtiError (JNICALL *GetObjectHashCode) (jvmtiEnv* env, 
+    jobject object, 
+    jint* hash_code_ptr);
+
+  /*   59 : Get Object Monitor Usage */
+  jvmtiError (JNICALL *GetObjectMonitorUsage) (jvmtiEnv* env, 
+    jobject object, 
+    jvmtiMonitorUsage* info_ptr);
+
+  /*   60 : Get Field Name (and Signature) */
+  jvmtiError (JNICALL *GetFieldName) (jvmtiEnv* env, 
+    jclass klass, 
+    jfieldID field, 
+    char** name_ptr, 
+    char** signature_ptr, 
+    char** generic_ptr);
+
+  /*   61 : Get Field Declaring Class */
+  jvmtiError (JNICALL *GetFieldDeclaringClass) (jvmtiEnv* env, 
+    jclass klass, 
+    jfieldID field, 
+    jclass* declaring_class_ptr);
+
+  /*   62 : Get Field Modifiers */
+  jvmtiError (JNICALL *GetFieldModifiers) (jvmtiEnv* env, 
+    jclass klass, 
+    jfieldID field, 
+    jint* modifiers_ptr);
+
+  /*   63 : Is Field Synthetic */
+  jvmtiError (JNICALL *IsFieldSynthetic) (jvmtiEnv* env, 
+    jclass klass, 
+    jfieldID field, 
+    jboolean* is_synthetic_ptr);
+
+  /*   64 : Get Method Name (and Signature) */
+  jvmtiError (JNICALL *GetMethodName) (jvmtiEnv* env, 
+    jmethodID method, 
+    char** name_ptr, 
+    char** signature_ptr, 
+    char** generic_ptr);
+
+  /*   65 : Get Method Declaring Class */
+  jvmtiError (JNICALL *GetMethodDeclaringClass) (jvmtiEnv* env, 
+    jmethodID method, 
+    jclass* declaring_class_ptr);
+
+  /*   66 : Get Method Modifiers */
+  jvmtiError (JNICALL *GetMethodModifiers) (jvmtiEnv* env, 
+    jmethodID method, 
+    jint* modifiers_ptr);
+
+  /*   67 :  RESERVED */
+  void *reserved67;
+
+  /*   68 : Get Max Locals */
+  jvmtiError (JNICALL *GetMaxLocals) (jvmtiEnv* env, 
+    jmethodID method, 
+    jint* max_ptr);
+
+  /*   69 : Get Arguments Size */
+  jvmtiError (JNICALL *GetArgumentsSize) (jvmtiEnv* env, 
+    jmethodID method, 
+    jint* size_ptr);
+
+  /*   70 : Get Line Number Table */
+  jvmtiError (JNICALL *GetLineNumberTable) (jvmtiEnv* env, 
+    jmethodID method, 
+    jint* entry_count_ptr, 
+    jvmtiLineNumberEntry** table_ptr);
+
+  /*   71 : Get Method Location */
+  jvmtiError (JNICALL *GetMethodLocation) (jvmtiEnv* env, 
+    jmethodID method, 
+    jlocation* start_location_ptr, 
+    jlocation* end_location_ptr);
+
+  /*   72 : Get Local Variable Table */
+  jvmtiError (JNICALL *GetLocalVariableTable) (jvmtiEnv* env, 
+    jmethodID method, 
+    jint* entry_count_ptr, 
+    jvmtiLocalVariableEntry** table_ptr);
+
+  /*   73 :  RESERVED */
+  void *reserved73;
+
+  /*   74 :  RESERVED */
+  void *reserved74;
+
+  /*   75 : Get Bytecodes */
+  jvmtiError (JNICALL *GetBytecodes) (jvmtiEnv* env, 
+    jmethodID method, 
+    jint* bytecode_count_ptr, 
+    unsigned char** bytecodes_ptr);
+
+  /*   76 : Is Method Native */
+  jvmtiError (JNICALL *IsMethodNative) (jvmtiEnv* env, 
+    jmethodID method, 
+    jboolean* is_native_ptr);
+
+  /*   77 : Is Method Synthetic */
+  jvmtiError (JNICALL *IsMethodSynthetic) (jvmtiEnv* env, 
+    jmethodID method, 
+    jboolean* is_synthetic_ptr);
+
+  /*   78 : Get Loaded Classes */
+  jvmtiError (JNICALL *GetLoadedClasses) (jvmtiEnv* env, 
+    jint* class_count_ptr, 
+    jclass** classes_ptr);
+
+  /*   79 : Get Classloader Classes */
+  jvmtiError (JNICALL *GetClassLoaderClasses) (jvmtiEnv* env, 
+    jobject initiating_loader, 
+    jint* class_count_ptr, 
+    jclass** classes_ptr);
+
+  /*   80 : Pop Frame */
+  jvmtiError (JNICALL *PopFrame) (jvmtiEnv* env, 
+    jthread thread);
+
+  /*   81 :  RESERVED */
+  void *reserved81;
+
+  /*   82 :  RESERVED */
+  void *reserved82;
+
+  /*   83 :  RESERVED */
+  void *reserved83;
+
+  /*   84 :  RESERVED */
+  void *reserved84;
+
+  /*   85 :  RESERVED */
+  void *reserved85;
+
+  /*   86 :  RESERVED */
+  void *reserved86;
+
+  /*   87 : Redefine Classes */
+  jvmtiError (JNICALL *RedefineClasses) (jvmtiEnv* env, 
+    jint class_count, 
+    const jvmtiClassDefinition* class_definitions);
+
+  /*   88 : Get Version Number */
+  jvmtiError (JNICALL *GetVersionNumber) (jvmtiEnv* env, 
+    jint* version_ptr);
+
+  /*   89 : Get Capabilities */
+  jvmtiError (JNICALL *GetCapabilities) (jvmtiEnv* env, 
+    jvmtiCapabilities* capabilities_ptr);
+
+  /*   90 : Get Source Debug Extension */
+  jvmtiError (JNICALL *GetSourceDebugExtension) (jvmtiEnv* env, 
+    jclass klass, 
+    char** source_debug_extension_ptr);
+
+  /*   91 : Is Method Obsolete */
+  jvmtiError (JNICALL *IsMethodObsolete) (jvmtiEnv* env, 
+    jmethodID method, 
+    jboolean* is_obsolete_ptr);
+
+  /*   92 : Suspend Thread List */
+  jvmtiError (JNICALL *SuspendThreadList) (jvmtiEnv* env, 
+    jint request_count, 
+    const jthread* request_list, 
+    jvmtiError* results);
+
+  /*   93 : Resume Thread List */
+  jvmtiError (JNICALL *ResumeThreadList) (jvmtiEnv* env, 
+    jint request_count, 
+    const jthread* request_list, 
+    jvmtiError* results);
+
+  /*   94 :  RESERVED */
+  void *reserved94;
+
+  /*   95 :  RESERVED */
+  void *reserved95;
+
+  /*   96 :  RESERVED */
+  void *reserved96;
+
+  /*   97 :  RESERVED */
+  void *reserved97;
+
+  /*   98 :  RESERVED */
+  void *reserved98;
+
+  /*   99 :  RESERVED */
+  void *reserved99;
+
+  /*   100 : Get All Stack Traces */
+  jvmtiError (JNICALL *GetAllStackTraces) (jvmtiEnv* env, 
+    jint max_frame_count, 
+    jvmtiStackInfo** stack_info_ptr, 
+    jint* thread_count_ptr);
+
+  /*   101 : Get Thread List Stack Traces */
+  jvmtiError (JNICALL *GetThreadListStackTraces) (jvmtiEnv* env, 
+    jint thread_count, 
+    const jthread* thread_list, 
+    jint max_frame_count, 
+    jvmtiStackInfo** stack_info_ptr);
+
+  /*   102 : Get Thread Local Storage */
+  jvmtiError (JNICALL *GetThreadLocalStorage) (jvmtiEnv* env, 
+    jthread thread, 
+    void** data_ptr);
+
+  /*   103 : Set Thread Local Storage */
+  jvmtiError (JNICALL *SetThreadLocalStorage) (jvmtiEnv* env, 
+    jthread thread, 
+    const void* data);
+
+  /*   104 : Get Stack Trace */
+  jvmtiError (JNICALL *GetStackTrace) (jvmtiEnv* env, 
+    jthread thread, 
+    jint start_depth, 
+    jint max_frame_count, 
+    jvmtiFrameInfo* frame_buffer, 
+    jint* count_ptr);
+
+  /*   105 :  RESERVED */
+  void *reserved105;
+
+  /*   106 : Get Tag */
+  jvmtiError (JNICALL *GetTag) (jvmtiEnv* env, 
+    jobject object, 
+    jlong* tag_ptr);
+
+  /*   107 : Set Tag */
+  jvmtiError (JNICALL *SetTag) (jvmtiEnv* env, 
+    jobject object, 
+    jlong tag);
+
+  /*   108 : Force Garbage Collection */
+  jvmtiError (JNICALL *ForceGarbageCollection) (jvmtiEnv* env);
+
+  /*   109 : Iterate Over Objects Reachable From Object */
+  jvmtiError (JNICALL *IterateOverObjectsReachableFromObject) (jvmtiEnv* env, 
+    jobject object, 
+    jvmtiObjectReferenceCallback object_reference_callback, 
+    void* user_data);
+
+  /*   110 : Iterate Over Reachable Objects */
+  jvmtiError (JNICALL *IterateOverReachableObjects) (jvmtiEnv* env, 
+    jvmtiHeapRootCallback heap_root_callback, 
+    jvmtiStackReferenceCallback stack_ref_callback, 
+    jvmtiObjectReferenceCallback object_ref_callback, 
+    void* user_data);
+
+  /*   111 : Iterate Over Heap */
+  jvmtiError (JNICALL *IterateOverHeap) (jvmtiEnv* env, 
+    jvmtiHeapObjectFilter object_filter, 
+    jvmtiHeapObjectCallback heap_object_callback, 
+    void* user_data);
+
+  /*   112 : Iterate Over Instances Of Class */
+  jvmtiError (JNICALL *IterateOverInstancesOfClass) (jvmtiEnv* env, 
+    jclass klass, 
+    jvmtiHeapObjectFilter object_filter, 
+    jvmtiHeapObjectCallback heap_object_callback, 
+    void* user_data);
+
+  /*   113 :  RESERVED */
+  void *reserved113;
+
+  /*   114 : Get Objects With Tags */
+  jvmtiError (JNICALL *GetObjectsWithTags) (jvmtiEnv* env, 
+    jint tag_count, 
+    const jlong* tags, 
+    jint* count_ptr, 
+    jobject** object_result_ptr, 
+    jlong** tag_result_ptr);
+
+  /*   115 :  RESERVED */
+  void *reserved115;
+
+  /*   116 :  RESERVED */
+  void *reserved116;
+
+  /*   117 :  RESERVED */
+  void *reserved117;
+
+  /*   118 :  RESERVED */
+  void *reserved118;
+
+  /*   119 :  RESERVED */
+  void *reserved119;
+
+  /*   120 : Set JNI Function Table */
+  jvmtiError (JNICALL *SetJNIFunctionTable) (jvmtiEnv* env, 
+    const jniNativeInterface* function_table);
+
+  /*   121 : Get JNI Function Table */
+  jvmtiError (JNICALL *GetJNIFunctionTable) (jvmtiEnv* env, 
+    jniNativeInterface** function_table);
+
+  /*   122 : Set Event Callbacks */
+  jvmtiError (JNICALL *SetEventCallbacks) (jvmtiEnv* env, 
+    const jvmtiEventCallbacks* callbacks, 
+    jint size_of_callbacks);
+
+  /*   123 : Generate Events */
+  jvmtiError (JNICALL *GenerateEvents) (jvmtiEnv* env, 
+    jvmtiEvent event_type);
+
+  /*   124 : Get Extension Functions */
+  jvmtiError (JNICALL *GetExtensionFunctions) (jvmtiEnv* env, 
+    jint* extension_count_ptr, 
+    jvmtiExtensionFunctionInfo** extensions);
+
+  /*   125 : Get Extension Events */
+  jvmtiError (JNICALL *GetExtensionEvents) (jvmtiEnv* env, 
+    jint* extension_count_ptr, 
+    jvmtiExtensionEventInfo** extensions);
+
+  /*   126 : Set Extension Event Callback */
+  jvmtiError (JNICALL *SetExtensionEventCallback) (jvmtiEnv* env, 
+    jint extension_event_index, 
+    jvmtiExtensionEvent callback);
+
+  /*   127 : Dispose Environment */
+  jvmtiError (JNICALL *DisposeEnvironment) (jvmtiEnv* env);
+
+  /*   128 : Get Error Name */
+  jvmtiError (JNICALL *GetErrorName) (jvmtiEnv* env, 
+    jvmtiError error, 
+    char** name_ptr);
+
+  /*   129 : Get JLocation Format */
+  jvmtiError (JNICALL *GetJLocationFormat) (jvmtiEnv* env, 
+    jvmtiJlocationFormat* format_ptr);
+
+  /*   130 : Get System Properties */
+  jvmtiError (JNICALL *GetSystemProperties) (jvmtiEnv* env, 
+    jint* count_ptr, 
+    char*** property_ptr);
+
+  /*   131 : Get System Property */
+  jvmtiError (JNICALL *GetSystemProperty) (jvmtiEnv* env, 
+    const char* property, 
+    char** value_ptr);
+
+  /*   132 : Set System Property */
+  jvmtiError (JNICALL *SetSystemProperty) (jvmtiEnv* env, 
+    const char* property, 
+    const char* value);
+
+  /*   133 : Get Phase */
+  jvmtiError (JNICALL *GetPhase) (jvmtiEnv* env, 
+    jvmtiPhase* phase_ptr);
+
+  /*   134 : Get Current Thread CPU Timer Information */
+  jvmtiError (JNICALL *GetCurrentThreadCpuTimerInfo) (jvmtiEnv* env, 
+    jvmtiTimerInfo* info_ptr);
+
+  /*   135 : Get Current Thread CPU Time */
+  jvmtiError (JNICALL *GetCurrentThreadCpuTime) (jvmtiEnv* env, 
+    jlong* nanos_ptr);
+
+  /*   136 : Get Thread CPU Timer Information */
+  jvmtiError (JNICALL *GetThreadCpuTimerInfo) (jvmtiEnv* env, 
+    jvmtiTimerInfo* info_ptr);
+
+  /*   137 : Get Thread CPU Time */
+  jvmtiError (JNICALL *GetThreadCpuTime) (jvmtiEnv* env, 
+    jthread thread, 
+    jlong* nanos_ptr);
+
+  /*   138 : Get Timer Information */
+  jvmtiError (JNICALL *GetTimerInfo) (jvmtiEnv* env, 
+    jvmtiTimerInfo* info_ptr);
+
+  /*   139 : Get Time */
+  jvmtiError (JNICALL *GetTime) (jvmtiEnv* env, 
+    jlong* nanos_ptr);
+
+  /*   140 : Get Potential Capabilities */
+  jvmtiError (JNICALL *GetPotentialCapabilities) (jvmtiEnv* env, 
+    jvmtiCapabilities* capabilities_ptr);
+
+  /*   141 :  RESERVED */
+  void *reserved141;
+
+  /*   142 : Add Capabilities */
+  jvmtiError (JNICALL *AddCapabilities) (jvmtiEnv* env, 
+    const jvmtiCapabilities* capabilities_ptr);
+
+  /*   143 : Relinquish Capabilities */
+  jvmtiError (JNICALL *RelinquishCapabilities) (jvmtiEnv* env, 
+    const jvmtiCapabilities* capabilities_ptr);
+
+  /*   144 : Get Available Processors */
+  jvmtiError (JNICALL *GetAvailableProcessors) (jvmtiEnv* env, 
+    jint* processor_count_ptr);
+
+  /*   145 :  RESERVED */
+  void *reserved145;
+
+  /*   146 :  RESERVED */
+  void *reserved146;
+
+  /*   147 : Get Environment Local Storage */
+  jvmtiError (JNICALL *GetEnvironmentLocalStorage) (jvmtiEnv* env, 
+    void** data_ptr);
+
+  /*   148 : Set Environment Local Storage */
+  jvmtiError (JNICALL *SetEnvironmentLocalStorage) (jvmtiEnv* env, 
+    const void* data);
+
+  /*   149 : Add To Bootstrap Class Loader Search */
+  jvmtiError (JNICALL *AddToBootstrapClassLoaderSearch) (jvmtiEnv* env, 
+    const char* segment);
+
+  /*   150 : Set Verbose Flag */
+  jvmtiError (JNICALL *SetVerboseFlag) (jvmtiEnv* env, 
+    jvmtiVerboseFlag flag, 
+    jboolean value);
+
+  /*   151 :  RESERVED */
+  void *reserved151;
+
+  /*   152 :  RESERVED */
+  void *reserved152;
+
+  /*   153 :  RESERVED */
+  void *reserved153;
+
+  /*   154 : Get Object Size */
+  jvmtiError (JNICALL *GetObjectSize) (jvmtiEnv* env, 
+    jobject object, 
+    jlong* size_ptr);
+
+} jvmtiInterface_1;
+
+struct _jvmtiEnv {
+    const struct jvmtiInterface_1_ *functions;
+#ifdef __cplusplus
+
+
+  jvmtiError Allocate(jlong size,
+            unsigned char** mem_ptr) {
+    return functions->Allocate(this, size, mem_ptr);
+  }
+
+  jvmtiError Deallocate(unsigned char* mem) {
+    return functions->Deallocate(this, mem);
+  }
+
+  jvmtiError GetThreadState(jthread thread,
+            jint* thread_state_ptr) {
+    return functions->GetThreadState(this, thread, thread_state_ptr);
+  }
+
+  jvmtiError GetAllThreads(jint* threads_count_ptr,
+            jthread** threads_ptr) {
+    return functions->GetAllThreads(this, threads_count_ptr, threads_ptr);
+  }
+
+  jvmtiError SuspendThread(jthread thread) {
+    return functions->SuspendThread(this, thread);
+  }
+
+  jvmtiError SuspendThreadList(jint request_count,
+            const jthread* request_list,
+            jvmtiError* results) {
+    return functions->SuspendThreadList(this, request_count, request_list, results);
+  }
+
+  jvmtiError ResumeThread(jthread thread) {
+    return functions->ResumeThread(this, thread);
+  }
+
+  jvmtiError ResumeThreadList(jint request_count,
+            const jthread* request_list,
+            jvmtiError* results) {
+    return functions->ResumeThreadList(this, request_count, request_list, results);
+  }
+
+  jvmtiError StopThread(jthread thread,
+            jobject exception) {
+    return functions->StopThread(this, thread, exception);
+  }
+
+  jvmtiError InterruptThread(jthread thread) {
+    return functions->InterruptThread(this, thread);
+  }
+
+  jvmtiError GetThreadInfo(jthread thread,
+            jvmtiThreadInfo* info_ptr) {
+    return functions->GetThreadInfo(this, thread, info_ptr);
+  }
+
+  jvmtiError GetOwnedMonitorInfo(jthread thread,
+            jint* owned_monitor_count_ptr,
+            jobject** owned_monitors_ptr) {
+    return functions->GetOwnedMonitorInfo(this, thread, owned_monitor_count_ptr, owned_monitors_ptr);
+  }
+
+  jvmtiError GetCurrentContendedMonitor(jthread thread,
+            jobject* monitor_ptr) {
+    return functions->GetCurrentContendedMonitor(this, thread, monitor_ptr);
+  }
+
+  jvmtiError RunAgentThread(jthread thread,
+            jvmtiStartFunction proc,
+            const void* arg,
+            jint priority) {
+    return functions->RunAgentThread(this, thread, proc, arg, priority);
+  }
+
+  jvmtiError SetThreadLocalStorage(jthread thread,
+            const void* data) {
+    return functions->SetThreadLocalStorage(this, thread, data);
+  }
+
+  jvmtiError GetThreadLocalStorage(jthread thread,
+            void** data_ptr) {
+    return functions->GetThreadLocalStorage(this, thread, data_ptr);
+  }
+
+  jvmtiError GetTopThreadGroups(jint* group_count_ptr,
+            jthreadGroup** groups_ptr) {
+    return functions->GetTopThreadGroups(this, group_count_ptr, groups_ptr);
+  }
+
+  jvmtiError GetThreadGroupInfo(jthreadGroup group,
+            jvmtiThreadGroupInfo* info_ptr) {
+    return functions->GetThreadGroupInfo(this, group, info_ptr);
+  }
+
+  jvmtiError GetThreadGroupChildren(jthreadGroup group,
+            jint* thread_count_ptr,
+            jthread** threads_ptr,
+            jint* group_count_ptr,
+            jthreadGroup** groups_ptr) {
+    return functions->GetThreadGroupChildren(this, group, thread_count_ptr, threads_ptr, group_count_ptr, groups_ptr);
+  }
+
+  jvmtiError GetStackTrace(jthread thread,
+            jint start_depth,
+            jint max_frame_count,
+            jvmtiFrameInfo* frame_buffer,
+            jint* count_ptr) {
+    return functions->GetStackTrace(this, thread, start_depth, max_frame_count, frame_buffer, count_ptr);
+  }
+
+  jvmtiError GetAllStackTraces(jint max_frame_count,
+            jvmtiStackInfo** stack_info_ptr,
+            jint* thread_count_ptr) {
+    return functions->GetAllStackTraces(this, max_frame_count, stack_info_ptr, thread_count_ptr);
+  }
+
+  jvmtiError GetThreadListStackTraces(jint thread_count,
+            const jthread* thread_list,
+            jint max_frame_count,
+            jvmtiStackInfo** stack_info_ptr) {
+    return functions->GetThreadListStackTraces(this, thread_count, thread_list, max_frame_count, stack_info_ptr);
+  }
+
+  jvmtiError GetFrameCount(jthread thread,
+            jint* count_ptr) {
+    return functions->GetFrameCount(this, thread, count_ptr);
+  }
+
+  jvmtiError PopFrame(jthread thread) {
+    return functions->PopFrame(this, thread);
+  }
+
+  jvmtiError GetFrameLocation(jthread thread,
+            jint depth,
+            jmethodID* method_ptr,
+            jlocation* location_ptr) {
+    return functions->GetFrameLocation(this, thread, depth, method_ptr, location_ptr);
+  }
+
+  jvmtiError NotifyFramePop(jthread thread,
+            jint depth) {
+    return functions->NotifyFramePop(this, thread, depth);
+  }
+
+  jvmtiError GetTag(jobject object,
+            jlong* tag_ptr) {
+    return functions->GetTag(this, object, tag_ptr);
+  }
+
+  jvmtiError SetTag(jobject object,
+            jlong tag) {
+    return functions->SetTag(this, object, tag);
+  }
+
+  jvmtiError ForceGarbageCollection() {
+    return functions->ForceGarbageCollection(this);
+  }
+
+  jvmtiError IterateOverObjectsReachableFromObject(jobject object,
+            jvmtiObjectReferenceCallback object_reference_callback,
+            void* user_data) {
+    return functions->IterateOverObjectsReachableFromObject(this, object, object_reference_callback, user_data);
+  }
+
+  jvmtiError IterateOverReachableObjects(jvmtiHeapRootCallback heap_root_callback,
+            jvmtiStackReferenceCallback stack_ref_callback,
+            jvmtiObjectReferenceCallback object_ref_callback,
+            void* user_data) {
+    return functions->IterateOverReachableObjects(this, heap_root_callback, stack_ref_callback, object_ref_callback, user_data);
+  }
+
+  jvmtiError IterateOverHeap(jvmtiHeapObjectFilter object_filter,
+            jvmtiHeapObjectCallback heap_object_callback,
+            void* user_data) {
+    return functions->IterateOverHeap(this, object_filter, heap_object_callback, user_data);
+  }
+
+  jvmtiError IterateOverInstancesOfClass(jclass klass,
+            jvmtiHeapObjectFilter object_filter,
+            jvmtiHeapObjectCallback heap_object_callback,
+            void* user_data) {
+    return functions->IterateOverInstancesOfClass(this, klass, object_filter, heap_object_callback, user_data);
+  }
+
+  jvmtiError GetObjectsWithTags(jint tag_count,
+            const jlong* tags,
+            jint* count_ptr,
+            jobject** object_result_ptr,
+            jlong** tag_result_ptr) {
+    return functions->GetObjectsWithTags(this, tag_count, tags, count_ptr, object_result_ptr, tag_result_ptr);
+  }
+
+  jvmtiError GetLocalObject(jthread thread,
+            jint depth,
+            jint slot,
+            jobject* value_ptr) {
+    return functions->GetLocalObject(this, thread, depth, slot, value_ptr);
+  }
+
+  jvmtiError GetLocalInt(jthread thread,
+            jint depth,
+            jint slot,
+            jint* value_ptr) {
+    return functions->GetLocalInt(this, thread, depth, slot, value_ptr);
+  }
+
+  jvmtiError GetLocalLong(jthread thread,
+            jint depth,
+            jint slot,
+            jlong* value_ptr) {
+    return functions->GetLocalLong(this, thread, depth, slot, value_ptr);
+  }
+
+  jvmtiError GetLocalFloat(jthread thread,
+            jint depth,
+            jint slot,
+            jfloat* value_ptr) {
+    return functions->GetLocalFloat(this, thread, depth, slot, value_ptr);
+  }
+
+  jvmtiError GetLocalDouble(jthread thread,
+            jint depth,
+            jint slot,
+            jdouble* value_ptr) {
+    return functions->GetLocalDouble(this, thread, depth, slot, value_ptr);
+  }
+
+  jvmtiError SetLocalObject(jthread thread,
+            jint depth,
+            jint slot,
+            jobject value) {
+    return functions->SetLocalObject(this, thread, depth, slot, value);
+  }
+
+  jvmtiError SetLocalInt(jthread thread,
+            jint depth,
+            jint slot,
+            jint value) {
+    return functions->SetLocalInt(this, thread, depth, slot, value);
+  }
+
+  jvmtiError SetLocalLong(jthread thread,
+            jint depth,
+            jint slot,
+            jlong value) {
+    return functions->SetLocalLong(this, thread, depth, slot, value);
+  }
+
+  jvmtiError SetLocalFloat(jthread thread,
+            jint depth,
+            jint slot,
+            jfloat value) {
+    return functions->SetLocalFloat(this, thread, depth, slot, value);
+  }
+
+  jvmtiError SetLocalDouble(jthread thread,
+            jint depth,
+            jint slot,
+            jdouble value) {
+    return functions->SetLocalDouble(this, thread, depth, slot, value);
+  }
+
+  jvmtiError SetBreakpoint(jmethodID method,
+            jlocation location) {
+    return functions->SetBreakpoint(this, method, location);
+  }
+
+  jvmtiError ClearBreakpoint(jmethodID method,
+            jlocation location) {
+    return functions->ClearBreakpoint(this, method, location);
+  }
+
+  jvmtiError SetFieldAccessWatch(jclass klass,
+            jfieldID field) {
+    return functions->SetFieldAccessWatch(this, klass, field);
+  }
+
+  jvmtiError ClearFieldAccessWatch(jclass klass,
+            jfieldID field) {
+    return functions->ClearFieldAccessWatch(this, klass, field);
+  }
+
+  jvmtiError SetFieldModificationWatch(jclass klass,
+            jfieldID field) {
+    return functions->SetFieldModificationWatch(this, klass, field);
+  }
+
+  jvmtiError ClearFieldModificationWatch(jclass klass,
+            jfieldID field) {
+    return functions->ClearFieldModificationWatch(this, klass, field);
+  }
+
+  jvmtiError GetLoadedClasses(jint* class_count_ptr,
+            jclass** classes_ptr) {
+    return functions->GetLoadedClasses(this, class_count_ptr, classes_ptr);
+  }
+
+  jvmtiError GetClassLoaderClasses(jobject initiating_loader,
+            jint* class_count_ptr,
+            jclass** classes_ptr) {
+    return functions->GetClassLoaderClasses(this, initiating_loader, class_count_ptr, classes_ptr);
+  }
+
+  jvmtiError GetClassSignature(jclass klass,
+            char** signature_ptr,
+            char** generic_ptr) {
+    return functions->GetClassSignature(this, klass, signature_ptr, generic_ptr);
+  }
+
+  jvmtiError GetClassStatus(jclass klass,
+            jint* status_ptr) {
+    return functions->GetClassStatus(this, klass, status_ptr);
+  }
+
+  jvmtiError GetSourceFileName(jclass klass,
+            char** source_name_ptr) {
+    return functions->GetSourceFileName(this, klass, source_name_ptr);
+  }
+
+  jvmtiError GetClassModifiers(jclass klass,
+            jint* modifiers_ptr) {
+    return functions->GetClassModifiers(this, klass, modifiers_ptr);
+  }
+
+  jvmtiError GetClassMethods(jclass klass,
+            jint* method_count_ptr,
+            jmethodID** methods_ptr) {
+    return functions->GetClassMethods(this, klass, method_count_ptr, methods_ptr);
+  }
+
+  jvmtiError GetClassFields(jclass klass,
+            jint* field_count_ptr,
+            jfieldID** fields_ptr) {
+    return functions->GetClassFields(this, klass, field_count_ptr, fields_ptr);
+  }
+
+  jvmtiError GetImplementedInterfaces(jclass klass,
+            jint* interface_count_ptr,
+            jclass** interfaces_ptr) {
+    return functions->GetImplementedInterfaces(this, klass, interface_count_ptr, interfaces_ptr);
+  }
+
+  jvmtiError IsInterface(jclass klass,
+            jboolean* is_interface_ptr) {
+    return functions->IsInterface(this, klass, is_interface_ptr);
+  }
+
+  jvmtiError IsArrayClass(jclass klass,
+            jboolean* is_array_class_ptr) {
+    return functions->IsArrayClass(this, klass, is_array_class_ptr);
+  }
+
+  jvmtiError GetClassLoader(jclass klass,
+            jobject* classloader_ptr) {
+    return functions->GetClassLoader(this, klass, classloader_ptr);
+  }
+
+  jvmtiError GetSourceDebugExtension(jclass klass,
+            char** source_debug_extension_ptr) {
+    return functions->GetSourceDebugExtension(this, klass, source_debug_extension_ptr);
+  }
+
+  jvmtiError RedefineClasses(jint class_count,
+            const jvmtiClassDefinition* class_definitions) {
+    return functions->RedefineClasses(this, class_count, class_definitions);
+  }
+
+  jvmtiError GetObjectSize(jobject object,
+            jlong* size_ptr) {
+    return functions->GetObjectSize(this, object, size_ptr);
+  }
+
+  jvmtiError GetObjectHashCode(jobject object,
+            jint* hash_code_ptr) {
+    return functions->GetObjectHashCode(this, object, hash_code_ptr);
+  }
+
+  jvmtiError GetObjectMonitorUsage(jobject object,
+            jvmtiMonitorUsage* info_ptr) {
+    return functions->GetObjectMonitorUsage(this, object, info_ptr);
+  }
+
+  jvmtiError GetFieldName(jclass klass,
+            jfieldID field,
+            char** name_ptr,
+            char** signature_ptr,
+            char** generic_ptr) {
+    return functions->GetFieldName(this, klass, field, name_ptr, signature_ptr, generic_ptr);
+  }
+
+  jvmtiError GetFieldDeclaringClass(jclass klass,
+            jfieldID field,
+            jclass* declaring_class_ptr) {
+    return functions->GetFieldDeclaringClass(this, klass, field, declaring_class_ptr);
+  }
+
+  jvmtiError GetFieldModifiers(jclass klass,
+            jfieldID field,
+            jint* modifiers_ptr) {
+    return functions->GetFieldModifiers(this, klass, field, modifiers_ptr);
+  }
+
+  jvmtiError IsFieldSynthetic(jclass klass,
+            jfieldID field,
+            jboolean* is_synthetic_ptr) {
+    return functions->IsFieldSynthetic(this, klass, field, is_synthetic_ptr);
+  }
+
+  jvmtiError GetMethodName(jmethodID method,
+            char** name_ptr,
+            char** signature_ptr,
+            char** generic_ptr) {
+    return functions->GetMethodName(this, method, name_ptr, signature_ptr, generic_ptr);
+  }
+
+  jvmtiError GetMethodDeclaringClass(jmethodID method,
+            jclass* declaring_class_ptr) {
+    return functions->GetMethodDeclaringClass(this, method, declaring_class_ptr);
+  }
+
+  jvmtiError GetMethodModifiers(jmethodID method,
+            jint* modifiers_ptr) {
+    return functions->GetMethodModifiers(this, method, modifiers_ptr);
+  }
+
+  jvmtiError GetMaxLocals(jmethodID method,
+            jint* max_ptr) {
+    return functions->GetMaxLocals(this, method, max_ptr);
+  }
+
+  jvmtiError GetArgumentsSize(jmethodID method,
+            jint* size_ptr) {
+    return functions->GetArgumentsSize(this, method, size_ptr);
+  }
+
+  jvmtiError GetLineNumberTable(jmethodID method,
+            jint* entry_count_ptr,
+            jvmtiLineNumberEntry** table_ptr) {
+    return functions->GetLineNumberTable(this, method, entry_count_ptr, table_ptr);
+  }
+
+  jvmtiError GetMethodLocation(jmethodID method,
+            jlocation* start_location_ptr,
+            jlocation* end_location_ptr) {
+    return functions->GetMethodLocation(this, method, start_location_ptr, end_location_ptr);
+  }
+
+  jvmtiError GetLocalVariableTable(jmethodID method,
+            jint* entry_count_ptr,
+            jvmtiLocalVariableEntry** table_ptr) {
+    return functions->GetLocalVariableTable(this, method, entry_count_ptr, table_ptr);
+  }
+
+  jvmtiError GetBytecodes(jmethodID method,
+            jint* bytecode_count_ptr,
+            unsigned char** bytecodes_ptr) {
+    return functions->GetBytecodes(this, method, bytecode_count_ptr, bytecodes_ptr);
+  }
+
+  jvmtiError IsMethodNative(jmethodID method,
+            jboolean* is_native_ptr) {
+    return functions->IsMethodNative(this, method, is_native_ptr);
+  }
+
+  jvmtiError IsMethodSynthetic(jmethodID method,
+            jboolean* is_synthetic_ptr) {
+    return functions->IsMethodSynthetic(this, method, is_synthetic_ptr);
+  }
+
+  jvmtiError IsMethodObsolete(jmethodID method,
+            jboolean* is_obsolete_ptr) {
+    return functions->IsMethodObsolete(this, method, is_obsolete_ptr);
+  }
+
+  jvmtiError CreateRawMonitor(const char* name,
+            jrawMonitorID* monitor_ptr) {
+    return functions->CreateRawMonitor(this, name, monitor_ptr);
+  }
+
+  jvmtiError DestroyRawMonitor(jrawMonitorID monitor) {
+    return functions->DestroyRawMonitor(this, monitor);
+  }
+
+  jvmtiError RawMonitorEnter(jrawMonitorID monitor) {
+    return functions->RawMonitorEnter(this, monitor);
+  }
+
+  jvmtiError RawMonitorExit(jrawMonitorID monitor) {
+    return functions->RawMonitorExit(this, monitor);
+  }
+
+  jvmtiError RawMonitorWait(jrawMonitorID monitor,
+            jlong millis) {
+    return functions->RawMonitorWait(this, monitor, millis);
+  }
+
+  jvmtiError RawMonitorNotify(jrawMonitorID monitor) {
+    return functions->RawMonitorNotify(this, monitor);
+  }
+
+  jvmtiError RawMonitorNotifyAll(jrawMonitorID monitor) {
+    return functions->RawMonitorNotifyAll(this, monitor);
+  }
+
+  jvmtiError SetJNIFunctionTable(const jniNativeInterface* function_table) {
+    return functions->SetJNIFunctionTable(this, function_table);
+  }
+
+  jvmtiError GetJNIFunctionTable(jniNativeInterface** function_table) {
+    return functions->GetJNIFunctionTable(this, function_table);
+  }
+
+  jvmtiError SetEventCallbacks(const jvmtiEventCallbacks* callbacks,
+            jint size_of_callbacks) {
+    return functions->SetEventCallbacks(this, callbacks, size_of_callbacks);
+  }
+
+  jvmtiError SetEventNotificationMode(jvmtiEventMode mode,
+            jvmtiEvent event_type,
+            jthread event_thread,
+             ...) {
+    return functions->SetEventNotificationMode(this, mode, event_type, event_thread);
+  }
+
+  jvmtiError GenerateEvents(jvmtiEvent event_type) {
+    return functions->GenerateEvents(this, event_type);
+  }
+
+  jvmtiError GetExtensionFunctions(jint* extension_count_ptr,
+            jvmtiExtensionFunctionInfo** extensions) {
+    return functions->GetExtensionFunctions(this, extension_count_ptr, extensions);
+  }
+
+  jvmtiError GetExtensionEvents(jint* extension_count_ptr,
+            jvmtiExtensionEventInfo** extensions) {
+    return functions->GetExtensionEvents(this, extension_count_ptr, extensions);
+  }
+
+  jvmtiError SetExtensionEventCallback(jint extension_event_index,
+            jvmtiExtensionEvent callback) {
+    return functions->SetExtensionEventCallback(this, extension_event_index, callback);
+  }
+
+  jvmtiError GetPotentialCapabilities(jvmtiCapabilities* capabilities_ptr) {
+    return functions->GetPotentialCapabilities(this, capabilities_ptr);
+  }
+
+  jvmtiError AddCapabilities(const jvmtiCapabilities* capabilities_ptr) {
+    return functions->AddCapabilities(this, capabilities_ptr);
+  }
+
+  jvmtiError RelinquishCapabilities(const jvmtiCapabilities* capabilities_ptr) {
+    return functions->RelinquishCapabilities(this, capabilities_ptr);
+  }
+
+  jvmtiError GetCapabilities(jvmtiCapabilities* capabilities_ptr) {
+    return functions->GetCapabilities(this, capabilities_ptr);
+  }
+
+  jvmtiError GetCurrentThreadCpuTimerInfo(jvmtiTimerInfo* info_ptr) {
+    return functions->GetCurrentThreadCpuTimerInfo(this, info_ptr);
+  }
+
+  jvmtiError GetCurrentThreadCpuTime(jlong* nanos_ptr) {
+    return functions->GetCurrentThreadCpuTime(this, nanos_ptr);
+  }
+
+  jvmtiError GetThreadCpuTimerInfo(jvmtiTimerInfo* info_ptr) {
+    return functions->GetThreadCpuTimerInfo(this, info_ptr);
+  }
+
+  jvmtiError GetThreadCpuTime(jthread thread,
+            jlong* nanos_ptr) {
+    return functions->GetThreadCpuTime(this, thread, nanos_ptr);
+  }
+
+  jvmtiError GetTimerInfo(jvmtiTimerInfo* info_ptr) {
+    return functions->GetTimerInfo(this, info_ptr);
+  }
+
+  jvmtiError GetTime(jlong* nanos_ptr) {
+    return functions->GetTime(this, nanos_ptr);
+  }
+
+  jvmtiError GetAvailableProcessors(jint* processor_count_ptr) {
+    return functions->GetAvailableProcessors(this, processor_count_ptr);
+  }
+
+  jvmtiError AddToBootstrapClassLoaderSearch(const char* segment) {
+    return functions->AddToBootstrapClassLoaderSearch(this, segment);
+  }
+
+  jvmtiError GetSystemProperties(jint* count_ptr,
+            char*** property_ptr) {
+    return functions->GetSystemProperties(this, count_ptr, property_ptr);
+  }
+
+  jvmtiError GetSystemProperty(const char* property,
+            char** value_ptr) {
+    return functions->GetSystemProperty(this, property, value_ptr);
+  }
+
+  jvmtiError SetSystemProperty(const char* property,
+            const char* value) {
+    return functions->SetSystemProperty(this, property, value);
+  }
+
+  jvmtiError GetPhase(jvmtiPhase* phase_ptr) {
+    return functions->GetPhase(this, phase_ptr);
+  }
+
+  jvmtiError DisposeEnvironment() {
+    return functions->DisposeEnvironment(this);
+  }
+
+  jvmtiError SetEnvironmentLocalStorage(const void* data) {
+    return functions->SetEnvironmentLocalStorage(this, data);
+  }
+
+  jvmtiError GetEnvironmentLocalStorage(void** data_ptr) {
+    return functions->GetEnvironmentLocalStorage(this, data_ptr);
+  }
+
+  jvmtiError GetVersionNumber(jint* version_ptr) {
+    return functions->GetVersionNumber(this, version_ptr);
+  }
+
+  jvmtiError GetErrorName(jvmtiError error,
+            char** name_ptr) {
+    return functions->GetErrorName(this, error, name_ptr);
+  }
+
+  jvmtiError SetVerboseFlag(jvmtiVerboseFlag flag,
+            jboolean value) {
+    return functions->SetVerboseFlag(this, flag, value);
+  }
+
+  jvmtiError GetJLocationFormat(jvmtiJlocationFormat* format_ptr) {
+    return functions->GetJLocationFormat(this, format_ptr);
+  }
+
+#endif /* __cplusplus */
+};
+
+
+#ifdef __cplusplus
+} /* extern "C" */
+#endif /* __cplusplus */
+
+#endif /* !_JAVA_JVMTI_H_ */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/jdk1.5.0_10/include/win32/jawt_md.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,41 @@
+/*
+ * @(#)jawt_md.h	1.7 03/12/19
+ *
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+#ifndef _JAVASOFT_JAWT_MD_H_
+#define _JAVASOFT_JAWT_MD_H_
+
+#include <windows.h>
+#include "jawt.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Win32-specific declarations for AWT native interface.
+ * See notes in jawt.h for an example of use.
+ */
+typedef struct jawt_Win32DrawingSurfaceInfo {
+    /* Native window, DDB, or DIB handle */
+    union {
+        HWND hwnd;
+        HBITMAP hbitmap;
+        void* pbits;
+    };
+    /*
+     * This HDC should always be used instead of the HDC returned from
+     * BeginPaint() or any calls to GetDC().
+     */
+    HDC hdc;
+    HPALETTE hpalette;
+} JAWT_Win32DrawingSurfaceInfo;
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* !_JAVASOFT_JAWT_MD_H_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/jdk1.5.0_10/include/win32/jni_md.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,19 @@
+/*
+ * @(#)jni_md.h	1.14 03/12/19
+ *
+ * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+#ifndef _JAVASOFT_JNI_MD_H_
+#define _JAVASOFT_JNI_MD_H_
+
+#define JNIEXPORT __declspec(dllexport)
+#define JNIIMPORT __declspec(dllimport)
+#define JNICALL __stdcall
+
+typedef long jint;
+typedef __int64 jlong;
+typedef signed char jbyte;
+
+#endif /* !_JAVASOFT_JNI_MD_H_ */
Binary file connectivity/com.nokia.tcf/native/TCFNative/TCFClient/resource.aps has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/resource.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by resource.rc
+//
+#define IDS_VERSION                     1
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        102
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1000
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFClient/resource.rc	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,120 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifndef _MAC
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 2,0,0,0
+ PRODUCTVERSION 2,0,0,0
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "Comments", "\0"
+            VALUE "CompanyName", "Nokia\0"
+            VALUE "FileDescription", "Target Communication Framework Client\0"
+            VALUE "FileVersion", "2, 0, 0, 0\0"
+            VALUE "InternalName", "TCFClient\0"
+            VALUE "LegalCopyright", "Copyright © 2008\0"
+            VALUE "LegalTrademarks", "\0"
+            VALUE "OriginalFilename", "TCFClient.dll\0"
+            VALUE "PrivateBuild", "\0"
+            VALUE "ProductName", "Nokia TCFClient\0"
+            VALUE "ProductVersion", "2, 0, 0, 0\0"
+            VALUE "SpecialBuild", "\0"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+#endif    // !_MAC
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE 
+BEGIN
+    IDS_VERSION             "2.0.0.0"
+END
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/ReadMe.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,37 @@
+========================================================================
+       DYNAMIC LINK LIBRARY : TCFCommSerial
+========================================================================
+
+
+AppWizard has created this TCFCommSerial DLL for you.  
+
+This file contains a summary of what you will find in each of the files that
+make up your TCFCommSerial application.
+
+TCFCommSerial.dsp
+    This file (the project file) contains information at the project level and
+    is used to build a single project or subproject. Other users can share the
+    project (.dsp) file, but they should export the makefiles locally.
+
+TCFCommSerial.cpp
+    This is the main DLL source file.
+
+TCFCommSerial.h
+    This file contains your DLL exports.
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+    These files are used to build a precompiled header (PCH) file
+    named TCFCommSerial.pch and a precompiled types file named StdAfx.obj.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+
+/////////////////////////////////////////////////////////////////////////////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/RealSerialComm.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,886 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// RealSerialComm.cpp: implementation of the CRealSerialComm class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "RealSerialComm.h"
+//#include "pn_const.h"
+//#include "OSTConstants.h"
+#include "Connection.h"
+
+#ifdef _DEBUG
+static char sLogMsg[3000];
+#endif
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+#ifdef _DEBUG
+#define LogErrorText(err) { if (err > 0) GetErrorText(err); }
+#define LogErrorText2(err) { if (err > 0) GetErrorText2(err); }
+#else
+#define LogErrorText(err) {}
+#define LogErrorText2(err) {}
+#endif
+
+#ifdef _DEBUG
+#define DUMPCOMSTAT(x) DumpComStat(x)
+#define DUMPCOMSTATP(x) DumpComStatP(x)
+#else
+#define DUMPCOMSTAT(x)
+#define DUMPCOMSTATP(x)
+#endif
+
+CRealSerialComm::CRealSerialComm()
+{
+#ifdef _DEBUG
+	if (gDoLogging)
+	{
+		FILE* f = fopen("c:\\tcf\\rscommlog.txt", "at");
+		fprintf(f, "CRealSerialComm::CRealSerialComm() (default constructor)\n");
+		fclose(f);
+	}
+#endif
+	m_hSerial = INVALID_HANDLE_VALUE;
+	m_serialPortName[0] = 0;
+	m_pBuffer = NULL;
+	m_ProcDebugLog = NULL;
+
+}
+CRealSerialComm::CRealSerialComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol)
+{
+#ifdef _DEBUG
+	if (gDoLogging)
+	{
+		FILE* f = fopen("c:\\tcf\\rscommlog.txt", "at");
+		fprintf(f, "connectSettings=%x connectionId=%d, protocol=%x\n", connectSettings, connectionId, protocol);
+		fclose(f);
+	}
+#endif
+	m_hSerial = INVALID_HANDLE_VALUE;
+	m_serialPortName[0] = 0;
+	m_pBuffer = NULL;
+
+	m_connId = connectionId;
+	m_Protocol = protocol;
+
+	m_ConnectSettings = new ConnectData();
+	memcpy(m_ConnectSettings, connectSettings, sizeof(ConnectData));
+
+#if (defined(LOG_COMM) || defined(LOG_PROCCOMM)) && defined(_DEBUG)
+	if (gDoLogging)
+	{
+		m_CommDebugLog = new TCDebugLog("TCF_Comm", connectionId, 2000L);
+		m_ProcDebugLog = new TCDebugLog("TCF_CommP", connectionId, 2000L);
+	}
+#endif
+}
+CRealSerialComm::~CRealSerialComm()
+{
+#ifdef _DEBUG
+	if (gDoLogging)
+	{
+		FILE* f = fopen("c:\\tcf\\rscommlog.txt", "at");
+		fprintf(f, "CRealSerialComm::~CRealSerialComm()\n");
+		fclose(f);
+	}
+#endif
+	if (m_hSerial != INVALID_HANDLE_VALUE)
+		::CloseHandle(m_hSerial);
+
+	if (m_pBuffer)
+		delete[] m_pBuffer;
+
+}
+
+long CRealSerialComm::OpenPort()
+{
+	COMMLOGOPEN();
+	COMMLOGS("CRealSerialComm::OpenPort\n");
+
+	long err = TCAPI_ERR_NONE;
+
+	char* comPort = m_ConnectSettings->realSerialSettings.comPort;
+	DWORD baudRate = m_ConnectSettings->realSerialSettings.baudRate;
+	DWORD dataBits = m_ConnectSettings->realSerialSettings.dataBits;
+	eParity parity = m_ConnectSettings->realSerialSettings.parity;
+	eStopBits stopBits = m_ConnectSettings->realSerialSettings.stopBits;
+	eFlowControl flow = m_ConnectSettings->realSerialSettings.flowControl;
+
+	COMMLOGA2("CRealSerialComm::OpenPort comPort=%s baudRate=%d\n", comPort, baudRate);
+	COMMLOGA2("CRealSerialComm::OpenPort dataBits=%d parity=%d\n", dataBits, parity);
+	COMMLOGA2("CRealSerialComm::OpenPort stopBits=%d flow=%d\n", stopBits, flow);
+
+	// fill in DCB
+	m_dcb.DCBlength = sizeof(DCB);
+	m_dcb.BaudRate = baudRate;
+	m_dcb.ByteSize = dataBits;
+
+	// parity
+	switch(parity)
+	{
+	default:
+	case eParityNone:
+		m_dcb.fParity = FALSE;
+		m_dcb.Parity = NOPARITY;
+		break;
+	case eParityEven:
+		m_dcb.fParity = TRUE;
+		m_dcb.Parity = EVENPARITY;
+		break;
+	case eParityOdd:
+		m_dcb.fParity = TRUE;
+		m_dcb.Parity = ODDPARITY;
+		break;
+	}
+
+	// stop bits
+	switch(stopBits)
+	{
+	default:
+	case eStopBits1:
+		m_dcb.StopBits = ONESTOPBIT;
+		break;
+	case eStopBits15:
+		m_dcb.StopBits = ONE5STOPBITS;
+		break;
+	case eStopBits2:
+		m_dcb.StopBits = TWOSTOPBITS;
+		break;
+	}
+
+	// flow control
+	switch(flow)
+	{
+	default:
+	case eFlowControlNone:
+		m_dcb.fRtsControl = RTS_CONTROL_DISABLE;
+		m_dcb.fOutxCtsFlow = FALSE;
+		m_dcb.fInX = m_dcb.fOutX = FALSE;
+		break;
+	case eFlowControlHW:
+		m_dcb.fRtsControl = RTS_CONTROL_HANDSHAKE;
+		m_dcb.fOutxCtsFlow = TRUE;
+		m_dcb.fInX = m_dcb.fOutX = FALSE;
+		break;
+	case eFlowControlSW:
+		m_dcb.fRtsControl = RTS_CONTROL_DISABLE;
+		m_dcb.fOutxCtsFlow = FALSE;
+		m_dcb.fInX = m_dcb.fOutX = TRUE;
+		m_dcb.XonChar = '\021';	// Ctrl-Q;
+		m_dcb.XoffChar = '\023';	// Ctrl-S;
+		m_dcb.XonLim = 100;
+		m_dcb.XoffLim = 100;
+		break;
+	}
+
+	// other things in DCB
+	m_dcb.fDtrControl = DTR_CONTROL_ENABLE;	
+	m_dcb.fDsrSensitivity = FALSE;
+	m_dcb.fBinary = TRUE;
+	m_dcb.fNull = FALSE;
+	m_dcb.fAbortOnError = TRUE;		// reads & writes will terminate with errors if one occurs
+
+	// translate serial port
+	char p[20]; char* pp = p;
+	strncpy(p, comPort, 20);
+	int len = (int)strlen(p);
+	for (int i = 0; i < len; i++)
+	{
+		p[i] = toupper(p[i]);
+	}
+	if (strncmp(p, "COM", 3) == 0)
+	{
+		pp+=3;
+	}
+	int val = atoi((const char*)pp);
+	if (val == INT_MIN || val == INT_MAX)
+	{
+		err = TCAPI_ERR_INVALID_MEDIA_DATA;
+	}
+	else
+	{
+		// must translate for CreatFile
+		_snprintf(m_serialPortName, MAX_COMPORT_SIZE, "\\\\.\\COM%d", val);
+	}
+
+
+	if (err == TCAPI_ERR_NONE)
+	{
+		m_hSerial = CreateFile(m_serialPortName,
+			GENERIC_READ|GENERIC_WRITE,	// dwDesiredAccess = read & write
+			0,							// dwSharedMode = 0 ==> device not shared
+			NULL,						// lpSecurityAttributes = NULL ==> not inheritable
+			OPEN_EXISTING,				// dwCreationDisposition ==> required for devices
+			0,							// dwFlagsAndAttributes ==> no special flags or attributes (not overlapped)
+			NULL );						// hTemplateFile = NULL ==> required for devices
+
+		if (m_hSerial != INVALID_HANDLE_VALUE)
+		{
+			// TODO: this is really not needed as we're not doing overlapped IO
+			//   and we're not creating an event nor waiting on that event
+			if (!SetCommMask(m_hSerial, EV_RXCHAR))
+			{
+				::CloseHandle(m_hSerial);
+				m_hSerial = INVALID_HANDLE_VALUE;
+				m_lastCommError = GetLastError();
+				err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+			}
+			else
+			{
+				// no error from SetCommMask
+				if (!SetupComm(m_hSerial,MAX_MESSAGE_LENGTH,MAX_SERIAL_MESSAGE_BUFFER_LENGTH))
+				{
+					CloseHandle(m_hSerial);
+					m_hSerial = INVALID_HANDLE_VALUE;
+					m_lastCommError = GetLastError();
+					err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+				}
+				else
+				{
+					// no error from SetupComm
+					// Get rid of any junk that might be sitting there.
+					PurgeComm( m_hSerial, PURGE_TXABORT | PURGE_RXABORT |
+										  PURGE_TXCLEAR | PURGE_RXCLEAR );
+
+					// Using these settings, the ReadFile command will return immediately
+					// rather than waiting for a timeout.
+					COMMTIMEOUTS lclCommTimeOuts;
+
+					lclCommTimeOuts.ReadIntervalTimeout			= MAXDWORD;	// we don't care about time between chars
+					lclCommTimeOuts.ReadTotalTimeoutMultiplier	= 100;
+					lclCommTimeOuts.ReadTotalTimeoutConstant	= 0;
+					lclCommTimeOuts.WriteTotalTimeoutMultiplier	= 100;
+					lclCommTimeOuts.WriteTotalTimeoutConstant	= 0;
+					
+					if (!SetCommTimeouts( m_hSerial, &lclCommTimeOuts ))
+					{
+						CloseHandle(m_hSerial); 
+						m_hSerial = INVALID_HANDLE_VALUE;
+						m_lastCommError = GetLastError();
+						err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+					}
+					else
+					{
+						// no error from SetCommTimeouts
+						err = SetDCB();
+						if (err != TCAPI_ERR_NONE)
+						{
+							CloseHandle(m_hSerial); 
+							m_hSerial = INVALID_HANDLE_VALUE;
+						}
+						else
+						{
+							// no error from SetDCB 
+							err = TCAPI_ERR_NONE;
+							m_numberBytes = 0;
+							m_lastCommError = 0;
+							m_isConnected = true;
+							m_pBuffer = new BYTE[MAX_SERIAL_MESSAGE_BUFFER_LENGTH];
+						}
+					}
+				}
+			}
+		}
+		else
+		{
+			// error from CreateFile
+			// couldn't open serial port
+			m_lastCommError = GetLastError();
+			err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+		}
+	}
+
+	COMMLOGA2("CRealSerialComm::OpenPort err=%d osError=%d\n", err, m_lastCommError);
+	LogErrorText(m_lastCommError);
+//	if (m_lastCommError > 0)
+//		LogErrorText(m_lastCommError);
+	COMMLOGCLOSE();
+	return err;
+}
+
+long CRealSerialComm::SetDCB()
+{
+	// assumes serial port is open
+	long err = TCAPI_ERR_NONE;
+	if (m_hSerial == INVALID_HANDLE_VALUE)
+		return err;
+
+	// setup DCB
+	DCB lcldcb;
+	lcldcb.DCBlength = sizeof(DCB);
+
+	if (!GetCommState( m_hSerial, &lcldcb ))
+	{
+		m_lastCommError = GetLastError();
+		err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+	}
+
+//	LogDCB(pInfo);
+	// copy only the ones that Connect() set initially
+	lcldcb.BaudRate = m_dcb.BaudRate;
+	lcldcb.ByteSize = m_dcb.ByteSize;
+	lcldcb.Parity = m_dcb.Parity;
+	lcldcb.StopBits = m_dcb.StopBits;
+	lcldcb.fRtsControl = m_dcb.fRtsControl;
+	lcldcb.fOutxCtsFlow = m_dcb.fOutxCtsFlow;
+	lcldcb.fDtrControl = m_dcb.fDtrControl;
+	lcldcb.fDsrSensitivity = m_dcb.fDsrSensitivity;
+	lcldcb.fInX = m_dcb.fInX;
+	lcldcb.fOutX = m_dcb.fOutX;
+	lcldcb.XonChar = m_dcb.XonChar;
+	lcldcb.XoffChar = m_dcb.XoffChar;
+	lcldcb.XonLim = m_dcb.XonLim;
+	lcldcb.XoffLim = m_dcb.XoffLim;
+	lcldcb.fBinary = m_dcb.fBinary;
+	lcldcb.fParity = m_dcb.fParity;
+	lcldcb.fNull = m_dcb.fNull;
+	lcldcb.fAbortOnError = m_dcb.fAbortOnError;
+
+	// DCB has been changed
+	// If setting the port went well then we are connected properly!
+	if (!SetCommState( m_hSerial, &lcldcb))
+	{
+		m_lastCommError = GetLastError();
+		err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+	}
+
+	return err;
+}
+
+long CRealSerialComm::ClosePort()
+{
+	COMMLOGOPEN();
+	COMMLOGS("CRealSerialComm::ClosePort\n");
+
+	long err = TCAPI_ERR_NONE;
+
+	if (!IsConnected()) 
+	{
+
+		err = TCAPI_ERR_MEDIA_NOT_OPEN;
+	}
+	else if (m_hSerial != INVALID_HANDLE_VALUE)
+	{
+		// disable event notification 
+		SetCommMask( m_hSerial, 0 );
+
+		// drop DTR
+		EscapeCommFunction( m_hSerial, CLRDTR );
+
+		// purge any outstanding reads/writes and close device handle
+		PurgeComm(	m_hSerial, 
+					PURGE_TXABORT | PURGE_RXABORT | PURGE_TXCLEAR | PURGE_RXCLEAR );
+		
+		CloseHandle( m_hSerial );
+		m_hSerial = INVALID_HANDLE_VALUE;
+
+		if (m_pBuffer)
+		{
+			delete[] m_pBuffer;
+			m_pBuffer = NULL;
+		}
+		m_isConnected = false;
+	}
+
+	COMMLOGCLOSE();
+	return err;
+}
+
+void CRealSerialComm::DeleteMsg(DWORD inMsgLength)
+{
+	if (!IsConnected())
+		return;
+	// inMsgLength includes header
+	// delete from beginning of buffer
+	if (inMsgLength == 0)
+		return;
+	if (m_numberBytes > 0 && m_numberBytes >= inMsgLength)
+	{
+		size_t moveLen = m_numberBytes - inMsgLength;
+		if (moveLen > 0)
+			memcpy(&m_pBuffer[0], &m_pBuffer[inMsgLength], moveLen);
+		m_numberBytes -= inMsgLength;
+	}
+}
+
+long CRealSerialComm::SendDataToPort(DWORD inSize, const void *inData)
+{
+
+	long err = TCAPI_ERR_NONE;
+	DWORD lclNumBytes=0;
+	COMMLOGOPEN();
+	COMMLOGS("CRealSerialComm::SendDataToPort\n");
+	COMMLOGCLOSE();
+	if (!IsConnected())
+	{
+
+		COMMLOGOPEN();
+		COMMLOGS("CRealSerialComm::SendDataToPort notConnected\n");
+		COMMLOGCLOSE();
+		return TCAPI_ERR_MEDIA_NOT_OPEN;
+	}
+
+	if (WriteFile(m_hSerial, inData, inSize, &lclNumBytes, NULL))
+	{
+		// we were successful, but did we send all data? (i.e., a timeout occurred)
+		// we are not doing overlapped I/O so if not all data went, then we timed out
+		//   and there was some kind of error
+		if (lclNumBytes != inSize)
+		{
+			COMMLOGOPEN();
+			COMMLOGA3("CRealSerialComm::SendDataToPort WriteFile not all bytes sent: lclNumBytes=%d inSize=%d err=%d\n", lclNumBytes, inSize, GetLastError());
+			COMMLOGCLOSE();
+
+			COMSTAT lclComStat;
+			DWORD lclErrorFlags = 0;
+			if (!ClearCommError(m_hSerial, &lclErrorFlags, &lclComStat))
+			{
+				// clear comm error returned error (this doesn't normally happen if the handle is valid and port is still open)
+				m_lastCommError = GetLastError();
+				err = TCAPI_ERR_COMM_ERROR;
+				COMMLOGOPEN();
+				COMMLOGA1("CRealSerialComm::SendDataToPort ClearCommError failed=%d\n", m_lastCommError);
+				COMMLOGCLOSE();
+			}
+			else
+			{
+				// clear comm error returned OK
+				// check error flags
+				if (lclErrorFlags)
+				{
+					// there really was an error
+					m_lastCommError = lclErrorFlags;
+					err = TCAPI_ERR_COMM_ERROR;
+					COMMLOGOPEN();
+					COMMLOGA1("CRealSerialComm::SendDataToPort ClearCommError succeeded lclErrorFlags=%d\n", m_lastCommError);
+					COMMLOGCLOSE();
+				}
+				else
+				{
+					// No OS error returned, but WriteFile failed to write out all bytes
+					//  therefore, since we are not doing overlapped I/O, this is an error.
+					err = TCAPI_ERR_COMM_ERROR;
+					COMMLOGOPEN();
+					COMMLOGS("CRealSerialComm::SendDataToPort ClearCommError succeeded lclErrorFlags=0\n");
+					COMMLOGCLOSE();
+//					DUMPCOMSTAT(&lclComStat);
+				}
+			}
+		}
+		else
+		{
+			// we sent all the data we requested
+			err = TCAPI_ERR_NONE;
+#ifdef _DEBUG
+			COMMLOGOPEN();
+			COMMLOGS("CRealSerialComm::SendDataToPort WriteFile successful\n");
+			BYTE* ptr = (BYTE*)inData;
+			long numBytes = (inSize > 20) ? 20 : inSize;
+			char msg[200];
+			sprintf(msg, "CRealSerialComm::SendDataToPort = ");
+			for (int i = 0; i < numBytes; i++)
+			{
+				sprintf(msg, "%s %02.2x", msg, ptr[i]);
+			}
+			sprintf(msg, "%s\n", msg);
+			COMMLOGS(msg);
+			COMMLOGCLOSE();
+#endif
+		}
+	}
+	else
+	{
+		// write failed
+		m_lastCommError = GetLastError();
+		err = TCAPI_ERR_COMM_ERROR;
+		COMMLOGOPEN();
+		COMMLOGA1("CRealSerialComm::SendDataToPort WriteFile failed = %d\n", m_lastCommError);
+		COMMLOGCLOSE();
+	}
+	
+	return err;
+}
+long CRealSerialComm::PollPort(DWORD &outSize)
+{
+	long err = TCAPI_ERR_NONE;
+	outSize = 0;
+
+	COMSTAT lclComStat;
+	DWORD lclErrorFlags=0;
+
+	if (!IsConnected())
+		return TCAPI_ERR_MEDIA_NOT_OPEN;
+
+//	Sleep(1);
+	if (!ClearCommError( m_hSerial, &lclErrorFlags, &lclComStat ))
+	{
+		m_lastCommError = GetLastError();
+		err = TCAPI_ERR_COMM_ERROR;
+
+		PROCLOGOPEN();
+		PROCLOGA1("CRealSerialComm::PollPort ClearCommError failed=%d\n", m_lastCommError);
+//		if (m_lastCommError > 0)
+		LogErrorText2(m_lastCommError);
+		PROCLOGCLOSE();
+	}
+	else
+	{
+		// ClearCommError succeeded
+		if (lclErrorFlags)
+		{
+			m_lastCommError = lclErrorFlags;
+			err = TCAPI_ERR_COMM_ERROR;
+			PROCLOGOPEN();
+			PROCLOGA1("CRealSerialComm::PollPort ClearCommError succeeded but lclErrorFlags=%d\n", m_lastCommError);
+			PROCLOGCLOSE();
+		}
+		else
+		{
+//			DUMPCOMSTATP(&lclComStat);
+//			PROCLOGOPEN();
+//			PROCLOGA1("CRealSerialComm::PollPort ClearCommError succeeded cbInQue=%d\n", lclComStat.cbInQue);
+//			PROCLOGCLOSE();
+			m_lastCommError = 0;
+		}
+		outSize = lclComStat.cbInQue;
+	}
+
+	return err;
+}
+#ifdef _DEBUG
+void CRealSerialComm::DumpComStat(COMSTAT* stat)
+{
+	COMMLOGOPEN();
+	COMMLOGA3(" comstat fCtsHold =%d fDsrHold =%d fRlsdHold=%d\n", stat->fCtsHold, stat->fDsrHold, stat->fRlsdHold);
+	COMMLOGA3(" comstat fXoffHold=%d fXoffSent=%d fEof     =%d\n", stat->fXoffHold, stat->fXoffSent, stat->fEof);
+	COMMLOGA3(" comstat fTxim    =%d cbInQue  =%d cbOutQue =%d\n", stat->fTxim, stat->cbInQue, stat->cbOutQue);
+	COMMLOGCLOSE();
+}
+void CRealSerialComm::DumpComStatP(COMSTAT* stat)
+{
+	PROCLOGOPEN();
+	PROCLOGA3(" comstat fCtsHold =%d fDsrHold =%d fRlsdHold=%d\n", stat->fCtsHold, stat->fDsrHold, stat->fRlsdHold);
+	PROCLOGA3(" comstat fXoffHold=%d fXoffSent=%d fEof     =%d\n", stat->fXoffHold, stat->fXoffSent, stat->fEof);
+	PROCLOGA3(" comstat fTxim    =%d cbInQue  =%d cbOutQue =%d\n", stat->fTxim, stat->cbInQue, stat->cbOutQue);
+	PROCLOGCLOSE();
+}
+#endif
+long CRealSerialComm::ReadPort(DWORD inSize, void *outData, DWORD &outSize)
+{
+	long err = TCAPI_ERR_NONE;
+	outSize = 0;
+
+	COMSTAT lclComStat;
+	DWORD lclErrorFlags=0;
+	DWORD lclLength;
+	if (!IsConnected())
+		return TCAPI_ERR_MEDIA_NOT_OPEN;
+
+	// clear out any errors in the channel and get the length of the buffer
+	if (!ClearCommError( m_hSerial, &lclErrorFlags, &lclComStat ))
+	{
+		// ClearCommError failed
+		m_lastCommError = GetLastError();
+		err = TCAPI_ERR_COMM_ERROR;
+		PROCLOGOPEN();
+		PROCLOGA1("CRealSerialComm::ReadPort ClearCommError failed=%d\n", m_lastCommError);
+		PROCLOGCLOSE();
+	}
+	else
+	{
+		if (lclErrorFlags)
+		{
+			m_lastCommError = lclErrorFlags;
+			err = TCAPI_ERR_COMM_ERROR;
+			PROCLOGOPEN();
+			PROCLOGA1("CRealSerialComm::ReadPort ClearCommError succeeded but lclErrorFlags=%d\n", m_lastCommError);
+			PROCLOGCLOSE();
+		}
+		else
+		{
+			m_lastCommError = 0;
+
+			lclLength = min( inSize, lclComStat.cbInQue );
+
+			if (lclLength > 0)
+			{
+				// Read lclLength number of bytes into outData.
+				if (!ReadFile(m_hSerial,outData,lclLength,&outSize,NULL))
+				{
+					m_lastCommError = GetLastError();
+					err = TCAPI_ERR_COMM_ERROR;
+					PROCLOGOPEN();
+					PROCLOGA1("CRealSerialComm::ReadPort ReadFile failed = %d\n", m_lastCommError);
+					PROCLOGCLOSE();
+				}
+				else
+				{
+					// ReadFile returned successful, check to see all our bytes came in
+					//  If a timeout happened - we may not get all the data
+					if (lclLength != outSize)
+					{
+						lclErrorFlags = 0;
+						if (!ClearCommError( m_hSerial, &lclErrorFlags, &lclComStat ))
+						{
+							// ClearCommError failed
+							m_lastCommError = GetLastError();
+							err = TCAPI_ERR_COMM_ERROR;
+							PROCLOGOPEN();
+							PROCLOGA1("CRealSerialComm::ReadPort ClearCommError failed=%d\n", m_lastCommError);
+							PROCLOGCLOSE();
+						}
+						else
+						{
+							// ClearCommError succeeded
+							if (lclErrorFlags)
+							{
+								// there really was an error
+								m_lastCommError = lclErrorFlags;
+								err = TCAPI_ERR_COMM_ERROR;
+								PROCLOGOPEN();
+								PROCLOGA1("CRealSerialComm::ReadPort ReadFile succeeded-not all data read lclErrorFlags=%d\n", m_lastCommError);
+								PROCLOGCLOSE();
+							}
+							else
+							{
+								// Since we are not doing overlapped I/O 
+								//  and our timeout values say to timeout, we should read all the bytes
+								//  that the last Poll told us, if not this is an error
+								err = TCAPI_ERR_COMM_ERROR;
+								PROCLOGOPEN();
+								PROCLOGS("CRealSerialComm::ReadPort ReadFile succeeded-not all data read lclErrorFlags=0\n");
+								PROCLOGCLOSE();
+							}
+						}
+					}
+					else
+					{
+						// all data read
+						m_lastCommError = 0;
+						PROCLOGOPEN();
+						PROCLOGS("CRealSerialComm::ReadPort ReadFile successful\n");
+						PROCLOGCLOSE();
+					}
+				}
+			}
+		}
+	}
+
+	return err;
+}
+
+long CRealSerialComm::ProcessBuffer(CConnection* pConn, CRegistry* pRegistry, long& numberProcessed)
+{
+	PROCLOGOPEN();
+	PROCLOGS("CRealSerialComm::ProcessBuffer\n");
+	PROCLOGCLOSE();
+
+	long err = TCAPI_ERR_NONE;
+	long routingErr = TCAPI_ERR_NONE;
+
+	if (!IsConnected())
+		return TCAPI_ERR_MEDIA_NOT_OPEN;
+
+	if (!m_Protocol)
+		return TCAPI_ERR_UNKNOWN_MEDIA_TYPE;
+
+	DWORD protocolHeaderLength = m_Protocol->GetHeaderLength();
+
+	// fill buffer
+	if (m_numberBytes < MAX_SERIAL_MESSAGE_BUFFER_LENGTH)
+	{
+		DWORD outLen = 0;
+		err = PollPort(outLen);
+		if (err == TCAPI_ERR_NONE && outLen > 0)
+		{
+			if (outLen > (MAX_SERIAL_MESSAGE_BUFFER_LENGTH - m_numberBytes))
+				outLen = MAX_SERIAL_MESSAGE_BUFFER_LENGTH - m_numberBytes;
+			BYTE *ptr = &m_pBuffer[m_numberBytes];
+			err = ReadPort(outLen, ptr, outLen);
+			if (err == TCAPI_ERR_NONE && outLen > 0)
+			{
+				m_numberBytes += outLen;
+			}
+		}
+	}
+	// now process buffer but only for complete messages
+	if (err == TCAPI_ERR_NONE)
+	{
+		if (m_numberBytes >= protocolHeaderLength)
+		{
+			BYTE* ptr = m_pBuffer;
+			long bytesRemaining = m_numberBytes;
+			long usedLen = 0;
+			bool done = false;
+
+			while (!done)
+			{
+				DWORD fullMessageLength = bytesRemaining;
+				DWORD rawLength = 0;
+				BYTE* fullMessage = ptr;
+				BYTE* rawMessage = ptr;
+				BYTE msgId = 0;
+				if (m_Protocol->DecodeMessage(fullMessage, fullMessageLength, msgId, rawMessage, rawLength))
+				{
+					err = PreProcessMessage(msgId, fullMessageLength, fullMessage);
+					if (err != TCAPI_ERR_NONE)
+					{
+						// notify all clients right now 
+						pConn->NotifyClientsCommError(err, false, 0);
+						err = TCAPI_ERR_NONE;
+					}
+#ifdef _DEBUG
+					int reallen = fullMessageLength;
+					if (reallen > 50) reallen = 50;
+					char msg[6];
+					msg[0] = '\0';
+
+					sLogMsg[0] = '\0';
+					if (reallen > 0)
+					{
+						sLogMsg[0] = '\0';
+						for (int i = 0; i < reallen; i++)
+						{
+							sprintf(msg, "%02.2x ", ptr[i]);
+							strcat(sLogMsg, msg);
+						}
+					}
+#endif
+					PROCLOGOPEN();
+					PROCLOGA5("CRealSerialComm::ProcessBuffer - RouteMesssage pRegistry = %x id=%x len=%d len=%d\n  msg=%s\n", pRegistry, msgId, fullMessageLength, rawLength, sLogMsg);
+					PROCLOGCLOSE();
+
+					err = pRegistry->RouteMessage(msgId, fullMessage, fullMessageLength, rawMessage, rawLength);
+					if (err != TCAPI_ERR_NONE) routingErr = err; // saved for future
+
+					numberProcessed++;
+					usedLen += fullMessageLength;
+					bytesRemaining -= fullMessageLength;
+					ptr += fullMessageLength;
+					if (bytesRemaining < protocolHeaderLength)
+						done = true;
+				}
+				else
+				{
+					done = true;
+				}
+			}
+			DeleteMsg(usedLen);
+		}
+	}
+//	PROCLOGOPEN();
+//	PROCLOGA1("CRealSerialComm::ProcessBuffer err = %d\n", err);
+//	PROCLOGCLOSE();
+	if (routingErr == TCAPI_ERR_NONE)
+		return err;
+	else
+		return routingErr;
+}
+bool CRealSerialComm::IsConnectionEqual(ConnectData* pConn)
+{
+	bool equal = false;
+
+	// forms accepted:
+	//   "comNN", "NN"
+	char* ptr1 = m_ConnectSettings->realSerialSettings.comPort;
+	char* ptr2 = pConn->realSerialSettings.comPort;
+	bool digit1found = false;
+	while(!digit1found && *ptr1 != NULL) 
+	{
+		if (*ptr1 >= '0' && *ptr1 <= '9')
+		{
+			digit1found = true;
+			break;
+		}
+		ptr1++;
+	}
+	bool digit2found = false;
+	while(!digit2found && *ptr2 != NULL) 
+	{
+		if (*ptr2 >= '0' && *ptr2 <= '9')
+		{
+			digit2found = true;
+			break;
+		}
+		ptr2++;
+	}
+	if (digit1found && digit2found)
+	{
+		if (strcmp(ptr1, ptr2) == 0)
+			equal = true;
+	}
+	return equal;
+}
+
+#ifdef _DEBUG
+DWORD CRealSerialComm::GetErrorText(DWORD inError)
+{
+	LPVOID lpMsgBuf;
+	
+	if (inError == 0) return inError;
+
+	FormatMessage( 
+		FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+		NULL,
+		inError,
+		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 	// Default language
+		(LPTSTR) &lpMsgBuf,
+		0,
+		NULL );
+
+	COMMLOGA1(" -- GetErrorText=%s", lpMsgBuf);
+	// Free the buffer.
+	LocalFree( lpMsgBuf );
+	
+	return inError;
+}
+DWORD CRealSerialComm::GetErrorText2(DWORD inError)
+{
+	LPVOID lpMsgBuf;
+	
+	if (inError == 0) return inError;
+
+	FormatMessage( 
+		FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+		NULL,
+		inError,
+		MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 	// Default language
+		(LPTSTR) &lpMsgBuf,
+		0,
+		NULL );
+
+	PROCLOGA1(" -- GetErrorText=%s", lpMsgBuf);
+	// Free the buffer.
+	LocalFree( lpMsgBuf );
+	
+	return inError;
+}
+
+void CRealSerialComm::DumpBuffer(BYTE* ptr, long length)
+{
+	char msg[256] = {0};
+	if (length > 50) length = 50;
+	for (int i = 0; i < length; i++)
+	{
+		sprintf(msg, "%s%02.2X ", msg, ptr[i]);
+	}
+	sprintf(msg, "%s\n", msg);
+	PROCLOGS(msg);
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/RealSerialComm.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,68 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// RealSerialComm.h: interface for the CRealSerialComm class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_REALSERIALCOMM_H__B20F73BE_260A_4A99_B7F5_E4F7C42FE05F__INCLUDED_)
+#define AFX_REALSERIALCOMM_H__B20F73BE_260A_4A99_B7F5_E4F7C42FE05F__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "BaseCom.h"
+#define MAX_MESSAGE_LENGTH	(64*1024L)
+#define MAX_SERIAL_MESSAGE_BUFFER_LENGTH (2*MAX_MESSAGE_LENGTH)
+
+class CRealSerialComm : public CBaseCom  
+{
+public:
+	CRealSerialComm();
+	CRealSerialComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol);
+	virtual ~CRealSerialComm();
+
+	virtual long OpenPort();
+	long ClosePort();
+	long SendDataToPort(DWORD inSize, const void* inData);
+	long PollPort(DWORD& outSize);
+	long ReadPort(DWORD inSize, void* outData, DWORD& outSize);
+	long ProcessBuffer(CConnection* pConn, CRegistry* pRegistry, long& numberProcessed);
+	void DeleteMsg(DWORD inMsgLength);
+	bool GetVersion(char* outVersion) { return false; } // don't have enough information for this
+	bool HasVersion() { return false; } // can we have a version?
+	virtual long PreProcessMessage(int inMsgType, DWORD inMsgLength, BYTE* inMessage) { return TCAPI_ERR_NONE; }
+	virtual long PreProcessMessage(BYTE msgId, DWORD inMsgLength, BYTE* inMessage) { return TCAPI_ERR_NONE; }
+	virtual bool IsConnectionEqual(ConnectData* pConn);
+
+#ifdef _DEBUG
+	DWORD GetErrorText(DWORD inError);
+	DWORD GetErrorText2(DWORD inError);
+	void DumpComStat(COMSTAT* stat);
+	void DumpComStatP(COMSTAT* stat);
+	void DumpBuffer(BYTE* ptr, long length);
+#endif
+
+private:
+	long SetDCB();
+	HANDLE m_hSerial;
+	DCB m_dcb;
+	char m_serialPortName[MAX_COMPORT_SIZE];
+
+};
+
+#endif // !defined(AFX_REALSERIALCOMM_H__B20F73BE_260A_4A99_B7F5_E4F7C42FE05F__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/StdAfx.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// stdafx.cpp : source file that includes just the standard includes
+//	TCFCommSerial.pch will be the pre-compiled header
+//	stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/StdAfx.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// stdafx.h : include file for standard system include files,
+//  or project specific include files that are used frequently, but
+//      are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__825E7B19_F712_4246_8188_8E96B42EEB40__INCLUDED_)
+#define AFX_STDAFX_H__825E7B19_F712_4246_8188_8E96B42EEB40__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+
+// Insert your headers here
+#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
+
+#include <stdlib.h>
+#include <windows.h>
+
+// TODO: reference additional headers your program requires here
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__825E7B19_F712_4246_8188_8E96B42EEB40__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/TCFCommSerial.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// TCFCommSerial.cpp : Defines the entry point for the DLL application.
+//
+
+#include "stdafx.h"
+#include <sys/stat.h>
+#include "TCFCommSerial.h"
+#include "RealSerialComm.h"
+
+static const char* pCommType="serial";
+static CBaseCom* pCommClass=NULL;
+#ifdef _DEBUG
+BOOL gDoLogging = FALSE;
+#endif
+
+BOOL APIENTRY DllMain( HANDLE hModule, 
+                       DWORD  ul_reason_for_call, 
+                       LPVOID lpReserved
+					 )
+{
+    switch (ul_reason_for_call)
+	{
+		case DLL_PROCESS_ATTACH:
+			{
+#ifdef _DEBUG
+				struct _stat buf;
+				char* dirname = "c:\\tcf";
+				int result = _stat(dirname, &buf);
+				if (result == 0) // exists
+				{
+					gDoLogging = TRUE;
+				}
+				else
+				{
+					gDoLogging = FALSE;
+				}
+#endif
+			}
+			break;
+		case DLL_THREAD_ATTACH:
+		case DLL_THREAD_DETACH:
+		case DLL_PROCESS_DETACH:
+			break;
+    }
+    return TRUE;
+}
+
+// register this connection type
+TCFCOMMSERIAL_API const char* RegisterComm()
+{
+	return pCommType;
+}
+
+// create this connection type
+TCFCOMMSERIAL_API CBaseCom* CreateComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol)
+{
+	pCommClass = new CRealSerialComm(connectSettings, connectionId, protocol);
+
+	return pCommClass;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/TCFCommSerial.dep	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,66 @@
+# Microsoft Developer Studio Generated Dependency File, included by TCFCommSerial.mak
+
+..\TCFServer\BaseCom.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	"..\TCFServer\BaseCom.h"\
+	"..\TCFServer\BaseProtocol.h"\
+	"..\TCFServer\Client.h"\
+	"..\TCFServer\MessageFile.h"\
+	"..\TCFServer\Registry.h"\
+	
+
+..\Common\Source\mutex.cpp : \
+	"..\Common\Headers\mutex.h"\
+	
+
+.\RealSerialComm.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	"..\TCFServer\BaseCom.h"\
+	"..\TCFServer\BaseProtocol.h"\
+	"..\TCFServer\Client.h"\
+	"..\TCFServer\Connection.h"\
+	"..\TCFServer\MessageFile.h"\
+	"..\TCFServer\Registry.h"\
+	".\RealSerialComm.h"\
+	
+
+.\StdAfx.cpp : \
+	".\StdAfx.h"\
+	
+
+..\Common\Source\TCDebugLog.cpp : \
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	
+
+.\TCFCommSerial.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	"..\TCFServer\BaseCom.h"\
+	"..\TCFServer\BaseProtocol.h"\
+	"..\TCFServer\Client.h"\
+	"..\TCFServer\MessageFile.h"\
+	"..\TCFServer\Registry.h"\
+	".\RealSerialComm.h"\
+	".\TCFCommSerial.h"\
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/TCFCommSerial.dsp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,154 @@
+# Microsoft Developer Studio Project File - Name="TCFCommSerial" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=TCFCommSerial - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFCommSerial.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFCommSerial.mak" CFG="TCFCommSerial - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "TCFCommSerial - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFCommSerial - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "TCFCommSerial - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /map /machine:I386
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copyBinaries Release
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "TCFCommSerial - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /map /debug /machine:I386 /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copyBinaries Debug
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "TCFCommSerial - Win32 Release"
+# Name "TCFCommSerial - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\TCFServer\BaseCom.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\mutex.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\RealSerialComm.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFCommSerial.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\RealSerialComm.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFCommSerial.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# End Target
+# End Project
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/TCFCommSerial.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "BaseCom.h"
+// The following ifdef block is the standard way of creating macros which make exporting 
+// from a DLL simpler. All files within this DLL are compiled with the TCFCOMMSERIAL_EXPORTS
+// symbol defined on the command line. this symbol should not be defined on any project
+// that uses this DLL. This way any other project whose source files include this file see 
+// TCFCOMMSERIAL_API functions as being imported from a DLL, wheras this DLL sees symbols
+// defined with this macro as being exported.
+#ifdef TCFCOMMSERIAL_EXPORTS
+#define TCFCOMMSERIAL_API __declspec(dllexport)
+#else
+#define TCFCOMMSERIAL_API __declspec(dllimport)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+TCFCOMMSERIAL_API const char* RegisterComm();
+TCFCOMMSERIAL_API CBaseCom* CreateComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol);
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/TCFCommSerial.mak	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,292 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on TCFCommSerial.dsp
+!IF "$(CFG)" == ""
+CFG=TCFCommSerial - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to TCFCommSerial - Win32 Debug.
+!ENDIF 
+
+!IF "$(CFG)" != "TCFCommSerial - Win32 Release" && "$(CFG)" != "TCFCommSerial - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFCommSerial.mak" CFG="TCFCommSerial - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "TCFCommSerial - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFCommSerial - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+!ERROR An invalid configuration is specified.
+!ENDIF 
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE 
+NULL=nul
+!ENDIF 
+
+!IF  "$(CFG)" == "TCFCommSerial - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFCommSerial.dll"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\BaseCom.obj"
+	-@erase "$(INTDIR)\mutex.obj"
+	-@erase "$(INTDIR)\RealSerialComm.obj"
+	-@erase "$(INTDIR)\StdAfx.obj"
+	-@erase "$(INTDIR)\TCDebugLog.obj"
+	-@erase "$(INTDIR)\TCFCommSerial.obj"
+	-@erase "$(INTDIR)\TCFCommSerial.pch"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(OUTDIR)\TCFCommSerial.dll"
+	-@erase "$(OUTDIR)\TCFCommSerial.exp"
+	-@erase "$(OUTDIR)\TCFCommSerial.lib"
+	-@erase "$(OUTDIR)\TCFCommSerial.map"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"$(INTDIR)\TCFCommSerial.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFCommSerial.bsc" 
+BSC32_SBRS= \
+	
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\TCFCommSerial.pdb" /map:"$(INTDIR)\TCFCommSerial.map" /machine:I386 /out:"$(OUTDIR)\TCFCommSerial.dll" /implib:"$(OUTDIR)\TCFCommSerial.lib" 
+LINK32_OBJS= \
+	"$(INTDIR)\BaseCom.obj" \
+	"$(INTDIR)\mutex.obj" \
+	"$(INTDIR)\RealSerialComm.obj" \
+	"$(INTDIR)\StdAfx.obj" \
+	"$(INTDIR)\TCDebugLog.obj" \
+	"$(INTDIR)\TCFCommSerial.obj"
+
+"$(OUTDIR)\TCFCommSerial.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFCommSerial.dll"
+   copyBinaries Release
+	echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF  "$(CFG)" == "TCFCommSerial - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFCommSerial.dll"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\BaseCom.obj"
+	-@erase "$(INTDIR)\mutex.obj"
+	-@erase "$(INTDIR)\RealSerialComm.obj"
+	-@erase "$(INTDIR)\StdAfx.obj"
+	-@erase "$(INTDIR)\TCDebugLog.obj"
+	-@erase "$(INTDIR)\TCFCommSerial.obj"
+	-@erase "$(INTDIR)\TCFCommSerial.pch"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(INTDIR)\vc60.pdb"
+	-@erase "$(OUTDIR)\TCFCommSerial.dll"
+	-@erase "$(OUTDIR)\TCFCommSerial.exp"
+	-@erase "$(OUTDIR)\TCFCommSerial.ilk"
+	-@erase "$(OUTDIR)\TCFCommSerial.lib"
+	-@erase "$(OUTDIR)\TCFCommSerial.map"
+	-@erase "$(OUTDIR)\TCFCommSerial.pdb"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"$(INTDIR)\TCFCommSerial.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFCommSerial.bsc" 
+BSC32_SBRS= \
+	
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\TCFCommSerial.pdb" /map:"$(INTDIR)\TCFCommSerial.map" /debug /machine:I386 /out:"$(OUTDIR)\TCFCommSerial.dll" /implib:"$(OUTDIR)\TCFCommSerial.lib" /pdbtype:sept 
+LINK32_OBJS= \
+	"$(INTDIR)\BaseCom.obj" \
+	"$(INTDIR)\mutex.obj" \
+	"$(INTDIR)\RealSerialComm.obj" \
+	"$(INTDIR)\StdAfx.obj" \
+	"$(INTDIR)\TCDebugLog.obj" \
+	"$(INTDIR)\TCFCommSerial.obj"
+
+"$(OUTDIR)\TCFCommSerial.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFCommSerial.dll"
+   copyBinaries Debug
+	echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF 
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("TCFCommSerial.dep")
+!INCLUDE "TCFCommSerial.dep"
+!ELSE 
+!MESSAGE Warning: cannot find "TCFCommSerial.dep"
+!ENDIF 
+!ENDIF 
+
+
+!IF "$(CFG)" == "TCFCommSerial - Win32 Release" || "$(CFG)" == "TCFCommSerial - Win32 Debug"
+SOURCE=..\TCFServer\BaseCom.cpp
+
+"$(INTDIR)\BaseCom.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommSerial.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\Common\Source\mutex.cpp
+
+"$(INTDIR)\mutex.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommSerial.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=.\RealSerialComm.cpp
+
+"$(INTDIR)\RealSerialComm.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommSerial.pch"
+
+
+SOURCE=.\StdAfx.cpp
+
+!IF  "$(CFG)" == "TCFCommSerial - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"$(INTDIR)\TCFCommSerial.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+"$(INTDIR)\StdAfx.obj"	"$(INTDIR)\TCFCommSerial.pch" : $(SOURCE) "$(INTDIR)"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF  "$(CFG)" == "TCFCommSerial - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"$(INTDIR)\TCFCommSerial.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+"$(INTDIR)\StdAfx.obj"	"$(INTDIR)\TCFCommSerial.pch" : $(SOURCE) "$(INTDIR)"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF 
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+
+"$(INTDIR)\TCDebugLog.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommSerial.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=.\TCFCommSerial.cpp
+
+"$(INTDIR)\TCFCommSerial.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommSerial.pch"
+
+
+
+!ENDIF 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/TCFCommSerial.plg	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,48 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: TCFCommSerial - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23D7.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"Debug/TCFCommSerial.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf.legacy\native\TCFNative\TCFCommSerial\RealSerialComm.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23D7.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23D8.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"Debug/TCFCommSerial.pdb" /map:"Debug/TCFCommSerial.map" /debug /machine:I386 /out:"Debug/TCFCommSerial.dll" /implib:"Debug/TCFCommSerial.lib" /pdbtype:sept 
+.\Debug\BaseCom.obj
+.\Debug\mutex.obj
+.\Debug\RealSerialComm.obj
+.\Debug\StdAfx.obj
+.\Debug\TCDebugLog.obj
+.\Debug\TCFCommSerial.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23D8.tmp"
+<h3>Output Window</h3>
+Compiling...
+RealSerialComm.cpp
+Linking...
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23D9.bat" with contents
+[
+@echo off
+copyBinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23D9.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommSerial.dll - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommSerial/copyBinaries.cmd	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,5 @@
+echo off
+echo Copy binaries to ..\..\..\os\win32\x86
+copy /V %1\TCFCommSerial.dll ..\..\..\os\win32\x86
+copy /V %1\TCFCommSerial.lib ..\..\..\os\win32\x86
+copy /V %1\TCFCommSerial.map ..\..\..\os\win32\x86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/ReadMe.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,37 @@
+========================================================================
+       DYNAMIC LINK LIBRARY : TCFCommTCP
+========================================================================
+
+
+AppWizard has created this TCFCommTCP DLL for you.  
+
+This file contains a summary of what you will find in each of the files that
+make up your TCFCommTCP application.
+
+TCFCommTCP.dsp
+    This file (the project file) contains information at the project level and
+    is used to build a single project or subproject. Other users can share the
+    project (.dsp) file, but they should export the makefiles locally.
+
+TCFCommTCP.cpp
+    This is the main DLL source file.
+
+TCFCommTCP.h
+    This file contains your DLL exports.
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+    These files are used to build a precompiled header (PCH) file
+    named TCFCommTCP.pch and a precompiled types file named StdAfx.obj.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+
+/////////////////////////////////////////////////////////////////////////////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/StdAfx.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// stdafx.cpp : source file that includes just the standard includes
+//	TCFCommTCP.pch will be the pre-compiled header
+//	stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/StdAfx.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// stdafx.h : include file for standard system include files,
+//  or project specific include files that are used frequently, but
+//      are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__7DD6E468_1B83_4416_82F1_1E86303443AD__INCLUDED_)
+#define AFX_STDAFX_H__7DD6E468_1B83_4416_82F1_1E86303443AD__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+
+// Insert your headers here
+#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
+
+#include <stdlib.h>
+#include <windows.h>
+
+// TODO: reference additional headers your program requires here
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__7DD6E468_1B83_4416_82F1_1E86303443AD__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/TCFCommTCP.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,76 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// TCFCommTCP.cpp : Defines the entry point for the DLL application.
+//
+
+#include "stdafx.h"
+#include <sys/stat.h>
+#include "TCFCommTCP.h"
+#include "TcpComm.h"
+
+static const char* pCommType="tcp";
+static CBaseCom* pCommClass=NULL;
+#ifdef _DEBUG
+BOOL gDoLogging = FALSE;
+#endif
+
+BOOL APIENTRY DllMain( HANDLE hModule, 
+                       DWORD  ul_reason_for_call, 
+                       LPVOID lpReserved
+					 )
+{
+    switch (ul_reason_for_call)
+	{
+		case DLL_PROCESS_ATTACH:
+			{
+#ifdef _DEBUG
+				struct _stat buf;
+				char* dirname = "c:\\tcf";
+				int result = _stat(dirname, &buf);
+				if (result == 0) // exists
+				{
+					gDoLogging = TRUE;
+				}
+				else
+				{
+					gDoLogging = FALSE;
+				}
+#endif
+			}
+			break;
+		case DLL_THREAD_ATTACH:
+		case DLL_THREAD_DETACH:
+		case DLL_PROCESS_DETACH:
+			break;
+    }
+    return TRUE;
+}
+
+// register this connection type
+TCFCOMMTCP_API const char* RegisterComm()
+{
+	return pCommType;
+}
+
+// create this connection type
+TCFCOMMTCP_API CBaseCom* CreateComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol)
+{
+	pCommClass = new CTcpComm(connectSettings, connectionId, protocol);
+
+	return pCommClass;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/TCFCommTCP.dep	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,66 @@
+# Microsoft Developer Studio Generated Dependency File, included by TCFCommTCP.mak
+
+..\TCFServer\BaseCom.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	"..\TCFServer\BaseCom.h"\
+	"..\TCFServer\BaseProtocol.h"\
+	"..\TCFServer\Client.h"\
+	"..\TCFServer\MessageFile.h"\
+	"..\TCFServer\Registry.h"\
+	
+
+..\Common\Source\mutex.cpp : \
+	"..\Common\Headers\mutex.h"\
+	
+
+.\StdAfx.cpp : \
+	".\StdAfx.h"\
+	
+
+..\Common\Source\TCDebugLog.cpp : \
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	
+
+.\TCFCommTCP.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	"..\TCFServer\BaseCom.h"\
+	"..\TCFServer\BaseProtocol.h"\
+	"..\TCFServer\Client.h"\
+	"..\TCFServer\MessageFile.h"\
+	"..\TCFServer\Registry.h"\
+	".\TCFCommTCP.h"\
+	".\TcpComm.h"\
+	
+
+.\TcpComm.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	"..\TCFServer\BaseCom.h"\
+	"..\TCFServer\BaseProtocol.h"\
+	"..\TCFServer\Client.h"\
+	"..\TCFServer\Connection.h"\
+	"..\TCFServer\MessageFile.h"\
+	"..\TCFServer\Registry.h"\
+	".\TcpComm.h"\
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/TCFCommTCP.dsp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,154 @@
+# Microsoft Developer Studio Project File - Name="TCFCommTCP" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=TCFCommTCP - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFCommTCP.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFCommTCP.mak" CFG="TCFCommTCP - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "TCFCommTCP - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFCommTCP - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "TCFCommTCP - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib shlwapi.lib /nologo /dll /map /machine:I386
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copybinaries Release
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "TCFCommTCP - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /FR /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib shlwapi.lib /nologo /dll /map /debug /machine:I386 /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copybinaries Debug
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "TCFCommTCP - Win32 Release"
+# Name "TCFCommTCP - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\TCFServer\BaseCom.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\mutex.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFCommTCP.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TcpComm.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFCommTCP.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TcpComm.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# End Target
+# End Project
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/TCFCommTCP.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "BaseCom.h"
+// The following ifdef block is the standard way of creating macros which make exporting 
+// from a DLL simpler. All files within this DLL are compiled with the TCFCOMMTCP_EXPORTS
+// symbol defined on the command line. this symbol should not be defined on any project
+// that uses this DLL. This way any other project whose source files include this file see 
+// TCFCOMMTCP_API functions as being imported from a DLL, wheras this DLL sees symbols
+// defined with this macro as being exported.
+#ifdef TCFCOMMTCP_EXPORTS
+#define TCFCOMMTCP_API __declspec(dllexport)
+#else
+#define TCFCOMMTCP_API __declspec(dllimport)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+TCFCOMMTCP_API const char* RegisterComm();
+TCFCOMMTCP_API CBaseCom* CreateComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol);
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/TCFCommTCP.mak	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,368 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on TCFCommTCP.dsp
+!IF "$(CFG)" == ""
+CFG=TCFCommTCP - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to TCFCommTCP - Win32 Debug.
+!ENDIF 
+
+!IF "$(CFG)" != "TCFCommTCP - Win32 Release" && "$(CFG)" != "TCFCommTCP - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFCommTCP.mak" CFG="TCFCommTCP - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "TCFCommTCP - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFCommTCP - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+!ERROR An invalid configuration is specified.
+!ENDIF 
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE 
+NULL=nul
+!ENDIF 
+
+!IF  "$(CFG)" == "TCFCommTCP - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFCommTCP.dll"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\BaseCom.obj"
+	-@erase "$(INTDIR)\mutex.obj"
+	-@erase "$(INTDIR)\StdAfx.obj"
+	-@erase "$(INTDIR)\TCDebugLog.obj"
+	-@erase "$(INTDIR)\TCFCommTCP.obj"
+	-@erase "$(INTDIR)\TCFCommTCP.pch"
+	-@erase "$(INTDIR)\TcpComm.obj"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(OUTDIR)\TCFCommTCP.dll"
+	-@erase "$(OUTDIR)\TCFCommTCP.exp"
+	-@erase "$(OUTDIR)\TCFCommTCP.lib"
+	-@erase "$(OUTDIR)\TCFCommTCP.map"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /Fp"$(INTDIR)\TCFCommTCP.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFCommTCP.bsc" 
+BSC32_SBRS= \
+	
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib shlwapi.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\TCFCommTCP.pdb" /map:"$(INTDIR)\TCFCommTCP.map" /machine:I386 /out:"$(OUTDIR)\TCFCommTCP.dll" /implib:"$(OUTDIR)\TCFCommTCP.lib" 
+LINK32_OBJS= \
+	"$(INTDIR)\BaseCom.obj" \
+	"$(INTDIR)\mutex.obj" \
+	"$(INTDIR)\StdAfx.obj" \
+	"$(INTDIR)\TCDebugLog.obj" \
+	"$(INTDIR)\TCFCommTCP.obj" \
+	"$(INTDIR)\TcpComm.obj"
+
+"$(OUTDIR)\TCFCommTCP.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFCommTCP.dll"
+   copybinaries Release
+	echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF  "$(CFG)" == "TCFCommTCP - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFCommTCP.dll" "$(OUTDIR)\TCFCommTCP.bsc"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\BaseCom.obj"
+	-@erase "$(INTDIR)\BaseCom.sbr"
+	-@erase "$(INTDIR)\mutex.obj"
+	-@erase "$(INTDIR)\mutex.sbr"
+	-@erase "$(INTDIR)\StdAfx.obj"
+	-@erase "$(INTDIR)\StdAfx.sbr"
+	-@erase "$(INTDIR)\TCDebugLog.obj"
+	-@erase "$(INTDIR)\TCDebugLog.sbr"
+	-@erase "$(INTDIR)\TCFCommTCP.obj"
+	-@erase "$(INTDIR)\TCFCommTCP.pch"
+	-@erase "$(INTDIR)\TCFCommTCP.sbr"
+	-@erase "$(INTDIR)\TcpComm.obj"
+	-@erase "$(INTDIR)\TcpComm.sbr"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(INTDIR)\vc60.pdb"
+	-@erase "$(OUTDIR)\TCFCommTCP.bsc"
+	-@erase "$(OUTDIR)\TCFCommTCP.dll"
+	-@erase "$(OUTDIR)\TCFCommTCP.exp"
+	-@erase "$(OUTDIR)\TCFCommTCP.ilk"
+	-@erase "$(OUTDIR)\TCFCommTCP.lib"
+	-@erase "$(OUTDIR)\TCFCommTCP.map"
+	-@erase "$(OUTDIR)\TCFCommTCP.pdb"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFCommTCP.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFCommTCP.bsc" 
+BSC32_SBRS= \
+	"$(INTDIR)\BaseCom.sbr" \
+	"$(INTDIR)\mutex.sbr" \
+	"$(INTDIR)\StdAfx.sbr" \
+	"$(INTDIR)\TCDebugLog.sbr" \
+	"$(INTDIR)\TCFCommTCP.sbr" \
+	"$(INTDIR)\TcpComm.sbr"
+
+"$(OUTDIR)\TCFCommTCP.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+    $(BSC32) @<<
+  $(BSC32_FLAGS) $(BSC32_SBRS)
+<<
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib shlwapi.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\TCFCommTCP.pdb" /map:"$(INTDIR)\TCFCommTCP.map" /debug /machine:I386 /out:"$(OUTDIR)\TCFCommTCP.dll" /implib:"$(OUTDIR)\TCFCommTCP.lib" /pdbtype:sept 
+LINK32_OBJS= \
+	"$(INTDIR)\BaseCom.obj" \
+	"$(INTDIR)\mutex.obj" \
+	"$(INTDIR)\StdAfx.obj" \
+	"$(INTDIR)\TCDebugLog.obj" \
+	"$(INTDIR)\TCFCommTCP.obj" \
+	"$(INTDIR)\TcpComm.obj"
+
+"$(OUTDIR)\TCFCommTCP.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFCommTCP.dll" "$(OUTDIR)\TCFCommTCP.bsc"
+   copybinaries Debug
+	echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF 
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("TCFCommTCP.dep")
+!INCLUDE "TCFCommTCP.dep"
+!ELSE 
+!MESSAGE Warning: cannot find "TCFCommTCP.dep"
+!ENDIF 
+!ENDIF 
+
+
+!IF "$(CFG)" == "TCFCommTCP - Win32 Release" || "$(CFG)" == "TCFCommTCP - Win32 Debug"
+SOURCE=..\TCFServer\BaseCom.cpp
+
+!IF  "$(CFG)" == "TCFCommTCP - Win32 Release"
+
+
+"$(INTDIR)\BaseCom.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "TCFCommTCP - Win32 Debug"
+
+
+"$(INTDIR)\BaseCom.obj"	"$(INTDIR)\BaseCom.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=..\Common\Source\mutex.cpp
+
+!IF  "$(CFG)" == "TCFCommTCP - Win32 Release"
+
+
+"$(INTDIR)\mutex.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "TCFCommTCP - Win32 Debug"
+
+
+"$(INTDIR)\mutex.obj"	"$(INTDIR)\mutex.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\StdAfx.cpp
+
+!IF  "$(CFG)" == "TCFCommTCP - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /Fp"$(INTDIR)\TCFCommTCP.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+"$(INTDIR)\StdAfx.obj"	"$(INTDIR)\TCFCommTCP.pch" : $(SOURCE) "$(INTDIR)"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF  "$(CFG)" == "TCFCommTCP - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFCommTCP.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+"$(INTDIR)\StdAfx.obj"	"$(INTDIR)\StdAfx.sbr"	"$(INTDIR)\TCFCommTCP.pch" : $(SOURCE) "$(INTDIR)"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF 
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+
+!IF  "$(CFG)" == "TCFCommTCP - Win32 Release"
+
+
+"$(INTDIR)\TCDebugLog.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "TCFCommTCP - Win32 Debug"
+
+
+"$(INTDIR)\TCDebugLog.obj"	"$(INTDIR)\TCDebugLog.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\TCFCommTCP.cpp
+
+!IF  "$(CFG)" == "TCFCommTCP - Win32 Release"
+
+
+"$(INTDIR)\TCFCommTCP.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+
+
+!ELSEIF  "$(CFG)" == "TCFCommTCP - Win32 Debug"
+
+
+"$(INTDIR)\TCFCommTCP.obj"	"$(INTDIR)\TCFCommTCP.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+
+
+!ENDIF 
+
+SOURCE=.\TcpComm.cpp
+
+!IF  "$(CFG)" == "TCFCommTCP - Win32 Release"
+
+
+"$(INTDIR)\TcpComm.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+
+
+!ELSEIF  "$(CFG)" == "TCFCommTCP - Win32 Debug"
+
+
+"$(INTDIR)\TcpComm.obj"	"$(INTDIR)\TcpComm.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommTCP.pch"
+
+
+!ENDIF 
+
+
+!ENDIF 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/TCFCommTCP.plg	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,16 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: TCFCommTCP - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+
+
+
+<h3>Results</h3>
+TCFCommTCP.dll - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/TcpComm.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,666 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// TcpComm.cpp: implementation of the CTcpComm class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "TcpComm.h"
+//#include "pn_const.h"
+//#include "OSTConstants.h"
+#include "Connection.h"
+
+#ifdef _DEBUG
+static char sTcpLogMsg[3000];
+#endif
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+CTcpComm::CTcpComm()
+{
+#ifdef _DEBUG
+	if (gDoLogging)
+	{
+		FILE* f = fopen("c:\\tcf\\tcpcommlog.txt", "at");
+		fprintf(f, "CTcpComm::CTcpComm() (default constructor)\n");
+		fclose(f);
+	}
+#endif
+	m_socket = INVALID_SOCKET;
+	m_timeOut.tv_sec = TIMEOUT_SEC(DEFAULT_SOCKET_TIMEOUT);
+	m_timeOut.tv_usec = TIMEOUT_USEC(DEFAULT_SOCKET_TIMEOUT);
+
+	m_hSocketEvent = WSA_INVALID_EVENT;
+}
+
+CTcpComm::CTcpComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol)
+{
+#ifdef _DEBUG
+	if (gDoLogging)
+	{
+		FILE* f = fopen("c:\\tcf\\tcpcommlog.txt", "at");
+		fprintf(f, "connectSettings=%x connectionId=%d, protocol=%x\n", connectSettings, connectionId, protocol);
+		fclose(f);
+	}
+#endif
+	m_connId = connectionId;
+	m_Protocol = protocol;
+
+	m_ConnectSettings = new ConnectData();
+	memcpy(m_ConnectSettings, connectSettings, sizeof(ConnectData));
+
+#if (defined(LOG_COMM) || defined(LOG_PROCCOMM)) && defined(_DEBUG)
+	if (gDoLogging)
+	{
+		m_CommDebugLog = new TCDebugLog("TCF_Comm", connectionId, 2000L);
+		m_ProcDebugLog = new TCDebugLog("TCF_CommP", connectionId, 2000L);
+	}
+#endif
+	m_socket = INVALID_SOCKET;
+	m_timeOut.tv_sec = TIMEOUT_SEC(DEFAULT_SOCKET_TIMEOUT);
+	m_timeOut.tv_usec = TIMEOUT_USEC(DEFAULT_SOCKET_TIMEOUT);
+
+	m_hSocketEvent = WSA_INVALID_EVENT;
+}
+CTcpComm::~CTcpComm()
+{
+#ifdef _DEBUG
+	if (gDoLogging)
+	{
+		FILE* f = fopen("c:\\tcf\\tcpcommlog.txt", "at");
+		fprintf(f, "CTcpComm::~CTcpComm()\n");
+		fclose(f);
+	}
+#endif
+	if (IsConnected())
+	{
+		shutdown(m_socket, SD_BOTH);
+		closesocket(m_socket);
+		WSACleanup();
+	}
+	if (m_pBuffer)
+		delete[] m_pBuffer;
+
+	if (m_hSocketEvent != WSA_INVALID_EVENT)
+		WSACloseEvent(m_hSocketEvent);
+
+}
+
+//#define USE_EVENTS
+;
+long CTcpComm::OpenPort()
+{
+	COMMLOGOPEN();
+	COMMLOGS("CTcpComm::OpenPort\n");
+
+	long err = TCAPI_ERR_NONE;
+	char* ipAddress = m_ConnectSettings->tcpSettings.ipAddress;
+	char* ipPort = m_ConnectSettings->tcpSettings.ipPort;
+	// set this to set socket to non-blocking
+	// DWORD nonblock = 1;		// non-blocking
+	DWORD nonblock = 0;		// blocking
+
+	COMMLOGA2("CTcpComm::OpenPort ipAddress=%s ipPort=%s\n", ipAddress, ipPort);
+
+	WSADATA wsaData;
+	int wsaErr = WSAStartup(MAKEWORD(2,2), &wsaData);
+	if (wsaErr != 0)
+	{
+		err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+//		err = -1;
+	}
+	else
+	{
+		m_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+		if (m_socket == INVALID_SOCKET)
+		{
+			m_lastCommError = WSAGetLastError();
+			WSACleanup();
+			err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+		}
+		else
+		{
+			if (ioctlsocket(m_socket, FIONBIO, &nonblock) == SOCKET_ERROR)
+			{
+				m_lastCommError = WSAGetLastError();
+				closesocket(m_socket);
+				m_socket = INVALID_SOCKET;
+				WSACleanup();
+				err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+			}
+			else
+			{
+				int i = SO_MAX_MSG_SIZE;
+				// set socket options
+				BOOL keepAlive = TRUE;
+				setsockopt(m_socket, SOL_SOCKET, SO_KEEPALIVE, (const char*)&keepAlive, sizeof(BOOL));
+				int sockRecvSize = MAX_TCP_MESSAGE_BUFFER_LENGTH;//(256*1024L);
+				setsockopt(m_socket, SOL_SOCKET, SO_RCVBUF, (const char*)&sockRecvSize, sizeof(int));
+				int sockSendSize = (64*1024L);
+				setsockopt(m_socket, SOL_SOCKET, SO_SNDBUF, (const char*)&sockSendSize, sizeof(int));
+				WSAGetLastError(); // ignore error for now
+				int gotsockRecvSize, optLen=sizeof(int);
+				getsockopt(m_socket, SOL_SOCKET, SO_RCVBUF, (char*)&gotsockRecvSize, &optLen);
+				WSAGetLastError(); // ignore error for now
+				// connect
+				WORD wPort = atoi(ipPort);
+				m_clientService.sin_family = AF_INET;
+				m_clientService.sin_addr.S_un.S_addr = inet_addr(ipAddress);
+				m_clientService.sin_port = htons(wPort);
+				if (connect(m_socket, (SOCKADDR*)&m_clientService, sizeof(m_clientService)) == SOCKET_ERROR)
+				{
+					int wsaErr = WSAGetLastError();
+					// socket is non-blocking
+					if (wsaErr != WSAEWOULDBLOCK)
+					{
+						m_lastCommError = wsaErr;
+
+						closesocket(m_socket);
+						m_socket = INVALID_SOCKET;
+						WSACleanup();
+						err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+					}
+					else // WSAEWOULDBLOCK error returned
+					{
+						// WSAEWOULDBLOCK use select now
+						fd_set readfds, writefds, exceptfds;
+						FD_ZERO(&readfds);
+						FD_ZERO(&writefds);
+						FD_ZERO(&exceptfds);
+						FD_SET(m_socket, &readfds);
+						FD_SET(m_socket, &writefds);
+						FD_SET(m_socket, &exceptfds);
+
+						int selRes = 0;
+						while(1)
+						{
+							selRes = select(0, &readfds, &writefds, &exceptfds, &m_timeOut);
+							if (selRes == SOCKET_ERROR)
+							{
+								wsaErr = WSAGetLastError();
+								if (wsaErr != WSAEWOULDBLOCK)
+								{
+									// real error
+									m_lastCommError = wsaErr;
+									shutdown(m_socket, SD_BOTH);
+									closesocket(m_socket);
+									m_socket = INVALID_SOCKET;
+									WSACleanup();
+									err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+								}
+								// else do another select
+							}
+							else if (selRes > 0)// select OK 
+							{
+								m_lastCommError = 0;
+								m_isConnected = true;
+								break; // done
+							}
+							else
+							{
+								// timed out
+								m_lastCommError = WSAGetLastError();
+								shutdown(m_socket, SD_BOTH);
+								closesocket(m_socket);
+								m_socket = INVALID_SOCKET;
+								WSACleanup();
+								err = TCAPI_ERR_WHILE_CONFIGURING_MEDIA;
+							}
+						}
+					}
+				}
+				else // connect return OK
+				{
+					m_lastCommError = 0;
+					m_isConnected = true;
+				}
+			}
+		}
+	}
+	if (err == TCAPI_ERR_NONE)
+	{
+		// we are connected
+		m_numberBytes = 0;
+		m_pBuffer = new BYTE[MAX_TCP_MESSAGE_BUFFER_LENGTH];
+
+#ifdef USE_EVENTS
+		// create an event for the socket closing
+		m_hSocketEvent = WSACreateEvent();
+		::WSAEventSelect(m_socket, m_hSocketEvent, FD_CLOSE);
+		// above call sets socket to non-blocking
+		//  cannot reset to blocking after using WSAEventSelect
+		//  thus this ioctlsocket call will fail
+		ioctlsocket(m_socket, FIONBIO, &nonblock);
+#endif
+	}
+
+	COMMLOGCLOSE();
+	return err;
+}
+
+long CTcpComm::ClosePort()
+{
+	COMMLOGOPEN();
+	COMMLOGS("CTcpComm::ClosePort\n");
+
+	long err = TCAPI_ERR_NONE;
+
+	if (!IsConnected())
+	{
+		err = TCAPI_ERR_MEDIA_NOT_OPEN;
+	}
+	else
+	{
+		shutdown(m_socket, SD_BOTH);
+		closesocket(m_socket);
+		m_socket = INVALID_SOCKET;
+		WSACleanup();
+
+		delete[] m_pBuffer;
+		m_pBuffer = NULL;
+
+		if (m_hSocketEvent != WSA_INVALID_EVENT)
+		{
+			WSACloseEvent(m_hSocketEvent);
+			m_hSocketEvent = WSA_INVALID_EVENT;
+		}
+	}
+
+	COMMLOGCLOSE();
+	return err;
+}
+
+long CTcpComm::PollPort(DWORD &outSize)
+{
+	long err = TCAPI_ERR_NONE;
+	DWORD numBytes = 0;
+	outSize = 0;
+
+	if (!IsConnected())
+		return TCAPI_ERR_MEDIA_NOT_OPEN;
+
+#ifdef USE_EVENTS
+	int ret = ::WSAWaitForMultipleEvents(1, &m_hSocketEvent, FALSE, 0, FALSE);
+	if (ret == WSA_WAIT_EVENT_0)
+	{
+		::WSAResetEvent(m_hSocketEvent);
+		err = TCAPI_ERR_COMM_ERROR;
+		m_lastCommError = WSAESHUTDOWN;
+		return err;
+	}
+#endif
+	int sockErr = 0; int optLen = sizeof(int);
+	int getErr = getsockopt(m_socket, SOL_SOCKET, SO_ERROR, (char*)&sockErr, &optLen);
+	if (getErr == 0)
+	{
+		if (sockErr)
+		{
+			err = TCAPI_ERR_COMM_ERROR;
+			m_lastCommError = sockErr;
+			return err;
+		}
+	}
+
+	fd_set readfds, writefds, exceptfds;
+	FD_ZERO(&readfds); 
+	FD_ZERO(&writefds); 
+	FD_ZERO(&exceptfds);
+	FD_SET(m_socket, &readfds);
+	FD_SET(m_socket, &writefds);
+	FD_SET(m_socket, &exceptfds);
+
+	bool portReady = false;
+	{
+		TIMEVAL pollTimeout = {0,0}; // just poll the status
+		int selErr = select(0, &readfds, 0, 0, &pollTimeout);
+		if (selErr > 0)
+		{
+			if (FD_ISSET(m_socket, &readfds))
+			{
+				m_lastCommError = 0;
+				portReady = true;
+			}
+		}
+		else if (selErr == SOCKET_ERROR)
+		{
+			m_lastCommError = WSAGetLastError();
+			err = TCAPI_ERR_COMM_ERROR;
+		}
+	}
+
+	if (portReady)
+	{
+		// read was signaled as ready
+		int recvRet = recv(m_socket, (char*)&m_pPeekBuffer, sizeof(m_pPeekBuffer), MSG_PEEK);
+		if (recvRet > 0)
+		{
+			if (ioctlsocket(m_socket, FIONREAD, &numBytes) == 0)
+			{
+				m_lastCommError = 0;
+				outSize = numBytes;
+			}
+			else // SOCKET_ERROR
+			{
+				m_lastCommError = WSAGetLastError();
+				err = TCAPI_ERR_COMM_ERROR;
+			}
+		}
+		else if (recvRet == 0)
+		{
+			// read was signalled as ready but recv=0 signals that remote shutdown
+			m_lastCommError = WSAESHUTDOWN;
+			err = TCAPI_ERR_COMM_ERROR;
+		}
+		else
+		{
+			// SOCKET_ERROR: error on recv other than a shutdown
+			m_lastCommError = WSAGetLastError();
+			err = TCAPI_ERR_COMM_ERROR;
+		}
+	}
+	return err;
+}
+
+long CTcpComm::ReadPort(DWORD inSize, void *outData, DWORD &outSize)
+{
+	long err = TCAPI_ERR_NONE;
+	DWORD numBytes = 0;
+	outSize = 0;
+
+	if (!IsConnected())
+		return TCAPI_ERR_MEDIA_NOT_OPEN;
+
+	if (ioctlsocket(m_socket, FIONREAD, &numBytes) == 0)
+	{
+		if (numBytes > inSize)
+			numBytes = inSize;
+		int res = recv(m_socket, (char*)outData, numBytes, 0);
+		if (res == SOCKET_ERROR)
+		{
+			long commErr = WSAGetLastError();
+			if ((DWORD)commErr != m_lastCommError)
+			{
+				m_lastCommError = commErr;
+			}
+			err = TCAPI_ERR_COMM_ERROR;
+		}
+		else if (res == 0)
+		{
+			// recv=0 --> connection closed
+			m_lastCommError = WSAESHUTDOWN;
+			err = TCAPI_ERR_COMM_ERROR;
+		}
+		else
+		{
+			m_lastCommError = 0;
+			outSize = numBytes;
+		}
+	}
+	else
+	{
+		// SOCKET_ERROR on ioctlsocket
+		m_lastCommError = WSAGetLastError();
+		err = TCAPI_ERR_COMM_ERROR;
+	}
+	return err;
+}
+long CTcpComm::ProcessBuffer(CConnection* pConn, CRegistry* pRegistry, long& numberProcessed)
+{
+
+	long err = TCAPI_ERR_NONE;
+	long routingErr = TCAPI_ERR_NONE;
+
+	if (!IsConnected())
+		return TCAPI_ERR_MEDIA_NOT_OPEN;
+
+	if (!m_Protocol)
+		return TCAPI_ERR_UNKNOWN_MEDIA_TYPE;
+
+	DWORD protocolHeaderLength = m_Protocol->GetHeaderLength();
+
+	// fill buffer
+	if (m_numberBytes < MAX_TCP_MESSAGE_BUFFER_LENGTH)
+	{
+		DWORD outLen = MAX_TCP_MESSAGE_BUFFER_LENGTH - m_numberBytes;
+		BYTE* ptr = &m_pBuffer[m_numberBytes];
+		err = ReadPort(outLen, ptr, outLen);
+		if (err == TCAPI_ERR_NONE && outLen > 0)
+		{
+			m_numberBytes += outLen;
+		}
+	}
+	
+	// now process buffer but only for complete messages
+	if (err == TCAPI_ERR_NONE)
+	{
+		if (m_numberBytes >= protocolHeaderLength)
+		{
+			BYTE* ptr = m_pBuffer;
+			long bytesRemaining = m_numberBytes;
+			long usedLen = 0;
+			bool done = false;
+
+			while (!done)
+			{
+				DWORD fullMessageLength = bytesRemaining;
+				DWORD rawLength = 0;
+				BYTE* fullMessage = ptr;
+				BYTE* rawMessage = ptr;
+				BYTE msgId = 0;
+				if (m_Protocol->DecodeMessage(fullMessage, fullMessageLength, msgId, rawMessage, rawLength))
+				{
+					err = PreProcessMessage(msgId, fullMessageLength, fullMessage);
+					if (err != TCAPI_ERR_NONE)
+					{
+						PROCLOGOPEN();
+						PROCLOGA1("CTcpComm::ProcessBuffer Notify err = %x\n", err);
+						PROCLOGCLOSE();
+						// notify all clients right now 
+						pConn->NotifyClientsCommError(err, false, 0);
+						err = TCAPI_ERR_NONE;
+					}
+#ifdef _DEBUG
+					int reallen = fullMessageLength;
+					if (reallen > 50) reallen = 50;
+					char msg[6];
+					msg[0] = '\0';
+
+					sTcpLogMsg[0] = '\0';
+					if (reallen > 0)
+					{
+						sTcpLogMsg[0] = '\0';
+						for (int i = 0; i < reallen; i++)
+						{
+							sprintf(msg, "%02.2x ", ptr[i]);
+							strcat(sTcpLogMsg, msg);
+						}
+					}
+#endif
+					PROCLOGOPEN();
+					PROCLOGA5("CTcpComm::ProcessBuffer - RouteMesssage pRegistry = %x id=%x len=%d len=%d\n  msg=%s\n", pRegistry, msgId, fullMessageLength, rawLength, sTcpLogMsg);
+					PROCLOGCLOSE();
+
+					err = pRegistry->RouteMessage(msgId, fullMessage, fullMessageLength, rawMessage, rawLength);
+					if (err != TCAPI_ERR_NONE) routingErr = err; // saved for future
+
+					numberProcessed++;
+					usedLen += fullMessageLength;
+					bytesRemaining -= fullMessageLength;
+					ptr += fullMessageLength;
+					if (bytesRemaining < protocolHeaderLength)
+						done = true;
+				}
+				else
+				{
+					done = true;
+				}
+			}
+			DeleteMsg(usedLen);
+		}
+	}
+
+	if (routingErr == TCAPI_ERR_NONE)
+		return err;
+	else
+		return routingErr;
+}
+
+
+long CTcpComm::SendDataToPort(DWORD inSize, const void* inData)
+{
+	COMMLOGOPEN();
+	COMMLOGS("CTcpComm::SendDataToPort\n");
+	
+	long err = TCAPI_ERR_NONE;
+
+	if (!IsConnected())
+	{
+		COMMLOGCLOSE();
+		return TCAPI_ERR_MEDIA_NOT_OPEN;
+	}
+
+#ifdef USE_EVENTS
+	int ret = ::WSAWaitForMultipleEvents(1, &m_hSocketEvent, FALSE, 0, FALSE);
+	if (ret == WSA_WAIT_EVENT_0)
+	{
+		::WSAResetEvent(m_hSocketEvent);
+		err = TCAPI_ERR_COMM_ERROR;
+		m_lastCommError = WSAESHUTDOWN;
+		COMMLOGCLOSE();
+		return err;
+	}
+#endif
+	int sockErr = 0; int optLen = sizeof(int);
+	int getErr = getsockopt(m_socket, SOL_SOCKET, SO_ERROR, (char*)&sockErr, &optLen);
+	if (getErr == 0)
+	{
+		if (sockErr)
+		{
+			err = TCAPI_ERR_COMM_ERROR;
+			m_lastCommError = sockErr;
+			COMMLOGCLOSE();
+			return err;
+		}
+	}
+
+	fd_set readfds, writefds, exceptfds;
+	FD_ZERO(&readfds); 
+	FD_ZERO(&writefds); 
+	FD_ZERO(&exceptfds);
+	FD_SET(m_socket, &readfds);
+	FD_SET(m_socket, &writefds);
+	FD_SET(m_socket, &exceptfds);
+
+	COMMLOGS("CTcpComm::SendDataToPort select\n");
+	bool portReady = false;
+	{
+		int selErr = select(0, &readfds, &writefds, &exceptfds, &m_timeOut);
+		if (selErr > 0)
+		{
+			if (FD_ISSET(m_socket, &writefds))
+			{
+				m_lastCommError = 0;
+				portReady = true;
+			}
+		}
+		else if (selErr == SOCKET_ERROR)
+		{
+			m_lastCommError = WSAGetLastError();
+			err = TCAPI_ERR_COMM_ERROR;
+		}
+		else if (selErr == 0) // timeout
+		{
+			m_lastCommError = WSAGetLastError();
+			err = TCAPI_ERR_COMM_ERROR;
+		}
+	}
+	COMMLOGA1("CTcpComm::SendDataToPort portReady=%d\n", portReady);
+	if (portReady)
+	{
+		COMMLOGS("CTcpComm::SendDataToPort send start\n");
+		// loop until all bytes are sent
+		DWORD bytesRemaining = inSize;
+		DWORD nSent = 0;
+		char* unsent = (char*)inData;
+		while (bytesRemaining)
+		{
+			nSent = send(m_socket, unsent, bytesRemaining, 0);
+			if (nSent == SOCKET_ERROR)
+			{
+				int wsaErr = WSAGetLastError();
+				// ignore "would block" errors
+				if (wsaErr != WSAEWOULDBLOCK)
+				{
+					// TODO: error handling
+					m_lastCommError = wsaErr;
+					err = TCAPI_ERR_COMM_ERROR;
+					break;
+				}
+			}
+			else
+			{
+				m_lastCommError = 0;
+				unsent += nSent;
+				bytesRemaining -= nSent;
+			}
+		} // end while
+		COMMLOGS("CTcpComm::SendDataToPort send done\n");
+#ifdef _DEBUG
+		BYTE* ptr = (BYTE*)inData;
+		long numBytes = (inSize > 20) ? 20 : inSize;
+		char msg[200];
+		sprintf(msg, "CTcpComm::SendDataToPort data = ");
+		for (int i = 0; i < numBytes; i++)
+		{
+			sprintf(msg, "%s %02.2x", msg, ptr[i]);
+		}
+		sprintf(msg, "%s\n", msg);
+		COMMLOGS(msg);
+#endif
+	}
+
+	COMMLOGCLOSE();
+	return err;
+}
+
+void CTcpComm::DeleteMsg(DWORD inMsgLength)
+{
+	// inMsgLength includes header
+	// delete from beginning of buffer
+	if (inMsgLength == 0)
+		return;
+	if (m_numberBytes > 0 && m_numberBytes >= inMsgLength)
+	{
+		size_t moveLen = m_numberBytes - inMsgLength;
+		if (moveLen > 0)
+			memcpy(&m_pBuffer[0], &m_pBuffer[inMsgLength], moveLen);
+		m_numberBytes -= inMsgLength;
+	}
+}
+bool CTcpComm::IsConnectionEqual(ConnectData* pConn)
+{
+	if ((strcmp(pConn->tcpSettings.ipAddress, m_ConnectSettings->tcpSettings.ipAddress) == 0) &&
+		(strcmp(pConn->tcpSettings.ipPort, m_ConnectSettings->tcpSettings.ipPort) == 0))
+	{
+		return true;
+	}
+	else
+	{
+		return false;
+	}
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/TcpComm.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// TcpComm.h: interface for the CTcpComm class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_TCPCOMM_H__69657421_6D37_497A_A377_12E71365EDAB__INCLUDED_)
+#define AFX_TCPCOMM_H__69657421_6D37_497A_A377_12E71365EDAB__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "BaseCom.h"
+#include <winsock2.h>
+
+#define MAX_MESSAGE_LENGTH	(64*1024L)
+#define MAX_TCP_MESSAGE_BUFFER_LENGTH (8*MAX_MESSAGE_LENGTH)
+
+#define DEFAULT_SOCKET_TIMEOUT	(2000000L)	// 2 seconds
+#define TIMEOUT_SEC(x) (x/1000000L)
+#define TIMEOUT_USEC(x) (x%1000000L)
+
+class CTcpComm : public CBaseCom  
+{
+public:
+	CTcpComm();
+	CTcpComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol);
+	virtual ~CTcpComm();
+
+	virtual long OpenPort();
+	long ClosePort();
+	long SendDataToPort(DWORD inSize, const void* inData);
+	long PollPort(DWORD& outSize);
+	long ReadPort(DWORD inSize, void* outData, DWORD& outSize);
+	long ProcessBuffer(CConnection* pConn, CRegistry* pRegistry, long& numberProcessed);
+//	long ProcessBuffer(NOTIFYCLIENTSCOMMERROR pNotify, ROUTEMESSAGE pRouteMessage, long& numberProcessed);
+//	long ProcessBuffer(long& numberProcessed);
+	void DeleteMsg(DWORD inMsgLength);
+	bool GetVersion(char* outVersion) { return false; } // don't have enough information for this
+	bool HasVersion() { return false; } // can we have a version?
+	virtual long PreProcessMessage(int inMsgType, DWORD inMsgLength, BYTE* inMessage) { return TCAPI_ERR_NONE; }
+	virtual long PreProcessMessage(BYTE msgId, DWORD inMsgLength, BYTE* inMessage) { return TCAPI_ERR_NONE; }
+	bool IsConnectionEqual(ConnectData* pConn);
+
+private:
+	SOCKET m_socket;
+	sockaddr_in m_clientService;
+	TIMEVAL m_timeOut;
+	WSAEVENT m_hSocketEvent; 
+	DWORD m_pPeekBuffer;
+
+};
+
+#endif // !defined(AFX_TCPCOMM_H__69657421_6D37_497A_A377_12E71365EDAB__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommTCP/copyBinaries.cmd	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,5 @@
+echo off
+echo Copy binaries to ..\..\..\os\win32\x86
+copy /V %1\TCFCommTCP.dll ..\..\..\os\win32\x86
+copy /V %1\TCFCommTCP.lib ..\..\..\os\win32\x86
+copy /V %1\TCFCommTCP.map ..\..\..\os\win32\x86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/ReadMe.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,37 @@
+========================================================================
+       DYNAMIC LINK LIBRARY : TCFCommVirtualSerial
+========================================================================
+
+
+AppWizard has created this TCFCommVirtualSerial DLL for you.  
+
+This file contains a summary of what you will find in each of the files that
+make up your TCFCommVirtualSerial application.
+
+TCFCommVirtualSerial.dsp
+    This file (the project file) contains information at the project level and
+    is used to build a single project or subproject. Other users can share the
+    project (.dsp) file, but they should export the makefiles locally.
+
+TCFCommVirtualSerial.cpp
+    This is the main DLL source file.
+
+TCFCommVirtualSerial.h
+    This file contains your DLL exports.
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+    These files are used to build a precompiled header (PCH) file
+    named TCFCommVirtualSerial.pch and a precompiled types file named StdAfx.obj.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+
+/////////////////////////////////////////////////////////////////////////////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/StdAfx.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// stdafx.cpp : source file that includes just the standard includes
+//	TCFCommVirtualSerial.pch will be the pre-compiled header
+//	stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/StdAfx.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// stdafx.h : include file for standard system include files,
+//  or project specific include files that are used frequently, but
+//      are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__9F3786A5_6D42_4ECE_BA9A_9BAE7093845F__INCLUDED_)
+#define AFX_STDAFX_H__9F3786A5_6D42_4ECE_BA9A_9BAE7093845F__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+
+// Insert your headers here
+#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
+
+#include <stdlib.h>
+#include <windows.h>
+
+// TODO: reference additional headers your program requires here
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__9F3786A5_6D42_4ECE_BA9A_9BAE7093845F__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/TCFCommVirtualSerial.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// TCFCommVirtualSerial.cpp : Defines the entry point for the DLL application.
+//
+
+#include "stdafx.h"
+#include <sys/stat.h>
+#include "TCFCommVirtualSerial.h"
+#include "VirtualSerialComm.h"
+
+static const char* pCommType="virtualserial";
+static CBaseCom* pCommClass=NULL;
+#ifdef _DEBUG
+BOOL gDoLogging = FALSE;
+#endif
+
+BOOL APIENTRY DllMain( HANDLE hModule, 
+                       DWORD  ul_reason_for_call, 
+                       LPVOID lpReserved
+					 )
+{
+    switch (ul_reason_for_call)
+	{
+		case DLL_PROCESS_ATTACH:
+			{
+#ifdef _DEBUG
+				struct _stat buf;
+				char* dirname = "c:\\tcf";
+				int result = _stat(dirname, &buf);
+				if (result == 0) // exists
+				{
+					gDoLogging = TRUE;
+				}
+				else
+				{
+					gDoLogging = FALSE;
+				}
+#endif
+			}
+			break;
+		case DLL_THREAD_ATTACH:
+		case DLL_THREAD_DETACH:
+		case DLL_PROCESS_DETACH:
+			break;
+    }
+    return TRUE;
+}
+
+// register this connection type
+TCFCOMMVIRTUALSERIAL_API const char* RegisterComm()
+{
+	return pCommType;
+}
+
+// create this connection type
+TCFCOMMVIRTUALSERIAL_API CBaseCom* CreateComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol)
+{
+	pCommClass = new VirtualSerialComm(connectSettings, connectionId, protocol);
+
+	return pCommClass;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/TCFCommVirtualSerial.dep	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,85 @@
+# Microsoft Developer Studio Generated Dependency File, included by TCFCommVirtualSerial.mak
+
+..\TCFServer\BaseCom.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	"..\TCFServer\BaseCom.h"\
+	"..\TCFServer\BaseProtocol.h"\
+	"..\TCFServer\Client.h"\
+	"..\TCFServer\MessageFile.h"\
+	"..\TCFServer\Registry.h"\
+	
+
+..\Common\Source\mutex.cpp : \
+	"..\Common\Headers\mutex.h"\
+	
+
+..\TCFCommSerial\RealSerialComm.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	"..\TCFCommSerial\RealSerialComm.h"\
+	"..\TCFServer\BaseCom.h"\
+	"..\TCFServer\BaseProtocol.h"\
+	"..\TCFServer\Client.h"\
+	"..\TCFServer\Connection.h"\
+	"..\TCFServer\MessageFile.h"\
+	"..\TCFServer\Registry.h"\
+	
+
+.\StdAfx.cpp : \
+	".\StdAfx.h"\
+	
+
+..\Common\Source\TCDebugLog.cpp : \
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	
+
+.\TCFCommVirtualSerial.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	"..\TCFCommSerial\RealSerialComm.h"\
+	"..\TCFServer\BaseCom.h"\
+	"..\TCFServer\BaseProtocol.h"\
+	"..\TCFServer\Client.h"\
+	"..\TCFServer\MessageFile.h"\
+	"..\TCFServer\Registry.h"\
+	".\TCFCommVirtualSerial.h"\
+	".\VirtualSerialComm.h"\
+	
+
+.\VirtualSerialComm.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	"..\TCFCommSerial\RealSerialComm.h"\
+	"..\TCFServer\BaseCom.h"\
+	"..\TCFServer\BaseProtocol.h"\
+	"..\TCFServer\Client.h"\
+	"..\TCFServer\MessageFile.h"\
+	"..\TCFServer\Registry.h"\
+	".\VirtualSerialComm.h"\
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/TCFCommVirtualSerial.dsp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,162 @@
+# Microsoft Developer Studio Project File - Name="TCFCommVirtualSerial" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=TCFCommVirtualSerial - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFCommVirtualSerial.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFCommVirtualSerial.mak" CFG="TCFCommVirtualSerial - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "TCFCommVirtualSerial - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFCommVirtualSerial - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "TCFCommVirtualSerial - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /map /machine:I386
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copyBinaries Release
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "TCFCommVirtualSerial - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /map /debug /machine:I386 /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copyBinaries Debug
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "TCFCommVirtualSerial - Win32 Release"
+# Name "TCFCommVirtualSerial - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\TCFServer\BaseCom.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\mutex.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\TCFCommSerial\RealSerialComm.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFCommVirtualSerial.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\VirtualSerialComm.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=..\TCFCommSerial\RealSerialComm.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFCommVirtualSerial.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\VirtualSerialComm.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# End Target
+# End Project
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/TCFCommVirtualSerial.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "BaseCom.h"
+// The following ifdef block is the standard way of creating macros which make exporting 
+// from a DLL simpler. All files within this DLL are compiled with the TCFCOMMVIRTUALSERIAL_EXPORTS
+// symbol defined on the command line. this symbol should not be defined on any project
+// that uses this DLL. This way any other project whose source files include this file see 
+// TCFCOMMVIRTUALSERIAL_API functions as being imported from a DLL, wheras this DLL sees symbols
+// defined with this macro as being exported.
+#ifdef TCFCOMMVIRTUALSERIAL_EXPORTS
+#define TCFCOMMVIRTUALSERIAL_API __declspec(dllexport)
+#else
+#define TCFCOMMVIRTUALSERIAL_API __declspec(dllimport)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+TCFCOMMVIRTUALSERIAL_API const char* RegisterComm();
+TCFCOMMVIRTUALSERIAL_API CBaseCom* CreateComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol);
+
+#ifdef __cplusplus
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/TCFCommVirtualSerial.mak	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,302 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on TCFCommVirtualSerial.dsp
+!IF "$(CFG)" == ""
+CFG=TCFCommVirtualSerial - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to TCFCommVirtualSerial - Win32 Debug.
+!ENDIF 
+
+!IF "$(CFG)" != "TCFCommVirtualSerial - Win32 Release" && "$(CFG)" != "TCFCommVirtualSerial - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFCommVirtualSerial.mak" CFG="TCFCommVirtualSerial - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "TCFCommVirtualSerial - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFCommVirtualSerial - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+!ERROR An invalid configuration is specified.
+!ENDIF 
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE 
+NULL=nul
+!ENDIF 
+
+!IF  "$(CFG)" == "TCFCommVirtualSerial - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFCommVirtualSerial.dll"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\BaseCom.obj"
+	-@erase "$(INTDIR)\mutex.obj"
+	-@erase "$(INTDIR)\RealSerialComm.obj"
+	-@erase "$(INTDIR)\StdAfx.obj"
+	-@erase "$(INTDIR)\TCDebugLog.obj"
+	-@erase "$(INTDIR)\TCFCommVirtualSerial.obj"
+	-@erase "$(INTDIR)\TCFCommVirtualSerial.pch"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(INTDIR)\VirtualSerialComm.obj"
+	-@erase "$(OUTDIR)\TCFCommVirtualSerial.dll"
+	-@erase "$(OUTDIR)\TCFCommVirtualSerial.exp"
+	-@erase "$(OUTDIR)\TCFCommVirtualSerial.lib"
+	-@erase "$(OUTDIR)\TCFCommVirtualSerial.map"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"$(INTDIR)\TCFCommVirtualSerial.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFCommVirtualSerial.bsc" 
+BSC32_SBRS= \
+	
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\TCFCommVirtualSerial.pdb" /map:"$(INTDIR)\TCFCommVirtualSerial.map" /machine:I386 /out:"$(OUTDIR)\TCFCommVirtualSerial.dll" /implib:"$(OUTDIR)\TCFCommVirtualSerial.lib" 
+LINK32_OBJS= \
+	"$(INTDIR)\BaseCom.obj" \
+	"$(INTDIR)\mutex.obj" \
+	"$(INTDIR)\RealSerialComm.obj" \
+	"$(INTDIR)\StdAfx.obj" \
+	"$(INTDIR)\TCDebugLog.obj" \
+	"$(INTDIR)\TCFCommVirtualSerial.obj" \
+	"$(INTDIR)\VirtualSerialComm.obj"
+
+"$(OUTDIR)\TCFCommVirtualSerial.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFCommVirtualSerial.dll"
+   copyBinaries Release
+	echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF  "$(CFG)" == "TCFCommVirtualSerial - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFCommVirtualSerial.dll"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\BaseCom.obj"
+	-@erase "$(INTDIR)\mutex.obj"
+	-@erase "$(INTDIR)\RealSerialComm.obj"
+	-@erase "$(INTDIR)\StdAfx.obj"
+	-@erase "$(INTDIR)\TCDebugLog.obj"
+	-@erase "$(INTDIR)\TCFCommVirtualSerial.obj"
+	-@erase "$(INTDIR)\TCFCommVirtualSerial.pch"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(INTDIR)\vc60.pdb"
+	-@erase "$(INTDIR)\VirtualSerialComm.obj"
+	-@erase "$(OUTDIR)\TCFCommVirtualSerial.dll"
+	-@erase "$(OUTDIR)\TCFCommVirtualSerial.exp"
+	-@erase "$(OUTDIR)\TCFCommVirtualSerial.ilk"
+	-@erase "$(OUTDIR)\TCFCommVirtualSerial.lib"
+	-@erase "$(OUTDIR)\TCFCommVirtualSerial.map"
+	-@erase "$(OUTDIR)\TCFCommVirtualSerial.pdb"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"$(INTDIR)\TCFCommVirtualSerial.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFCommVirtualSerial.bsc" 
+BSC32_SBRS= \
+	
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\TCFCommVirtualSerial.pdb" /map:"$(INTDIR)\TCFCommVirtualSerial.map" /debug /machine:I386 /out:"$(OUTDIR)\TCFCommVirtualSerial.dll" /implib:"$(OUTDIR)\TCFCommVirtualSerial.lib" /pdbtype:sept 
+LINK32_OBJS= \
+	"$(INTDIR)\BaseCom.obj" \
+	"$(INTDIR)\mutex.obj" \
+	"$(INTDIR)\RealSerialComm.obj" \
+	"$(INTDIR)\StdAfx.obj" \
+	"$(INTDIR)\TCDebugLog.obj" \
+	"$(INTDIR)\TCFCommVirtualSerial.obj" \
+	"$(INTDIR)\VirtualSerialComm.obj"
+
+"$(OUTDIR)\TCFCommVirtualSerial.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFCommVirtualSerial.dll"
+   copyBinaries Debug
+	echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF 
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("TCFCommVirtualSerial.dep")
+!INCLUDE "TCFCommVirtualSerial.dep"
+!ELSE 
+!MESSAGE Warning: cannot find "TCFCommVirtualSerial.dep"
+!ENDIF 
+!ENDIF 
+
+
+!IF "$(CFG)" == "TCFCommVirtualSerial - Win32 Release" || "$(CFG)" == "TCFCommVirtualSerial - Win32 Debug"
+SOURCE=..\TCFServer\BaseCom.cpp
+
+"$(INTDIR)\BaseCom.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommVirtualSerial.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\Common\Source\mutex.cpp
+
+"$(INTDIR)\mutex.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommVirtualSerial.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=..\TCFCommSerial\RealSerialComm.cpp
+
+"$(INTDIR)\RealSerialComm.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommVirtualSerial.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=.\StdAfx.cpp
+
+!IF  "$(CFG)" == "TCFCommVirtualSerial - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"$(INTDIR)\TCFCommVirtualSerial.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+"$(INTDIR)\StdAfx.obj"	"$(INTDIR)\TCFCommVirtualSerial.pch" : $(SOURCE) "$(INTDIR)"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF  "$(CFG)" == "TCFCommVirtualSerial - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"$(INTDIR)\TCFCommVirtualSerial.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+"$(INTDIR)\StdAfx.obj"	"$(INTDIR)\TCFCommVirtualSerial.pch" : $(SOURCE) "$(INTDIR)"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF 
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+
+"$(INTDIR)\TCDebugLog.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommVirtualSerial.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=.\TCFCommVirtualSerial.cpp
+
+"$(INTDIR)\TCFCommVirtualSerial.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommVirtualSerial.pch"
+
+
+SOURCE=.\VirtualSerialComm.cpp
+
+"$(INTDIR)\VirtualSerialComm.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFCommVirtualSerial.pch"
+
+
+
+!ENDIF 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/TCFCommVirtualSerial.plg	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,49 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: TCFCommVirtualSerial - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23DA.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"Debug/TCFCommVirtualSerial.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf.legacy\native\TCFNative\TCFCommSerial\RealSerialComm.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23DA.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23DB.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"Debug/TCFCommVirtualSerial.pdb" /map:"Debug/TCFCommVirtualSerial.map" /debug /machine:I386 /out:"Debug/TCFCommVirtualSerial.dll" /implib:"Debug/TCFCommVirtualSerial.lib" /pdbtype:sept 
+.\Debug\BaseCom.obj
+.\Debug\mutex.obj
+.\Debug\RealSerialComm.obj
+.\Debug\StdAfx.obj
+.\Debug\TCDebugLog.obj
+.\Debug\TCFCommVirtualSerial.obj
+.\Debug\VirtualSerialComm.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23DB.tmp"
+<h3>Output Window</h3>
+Compiling...
+RealSerialComm.cpp
+Linking...
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23DC.bat" with contents
+[
+@echo off
+copyBinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP23DC.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommVirtualSerial.dll - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/VirtualSerialComm.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// VirtualSerialComm1.cpp: implementation of the VirtualSerialComm class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "VirtualSerialComm.h"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+VirtualSerialComm::VirtualSerialComm()
+{
+#ifdef _DEBUG
+	if (gDoLogging)
+	{
+		FILE* f = fopen("c:\\tcf\\vscommlog.txt", "at");
+		fprintf(f, "VirtualSerialComm::VirtualSerialComm() (default constructor)\n");
+		fclose(f);
+	}
+#endif
+}
+VirtualSerialComm::VirtualSerialComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol)
+{
+#ifdef _DEBUG
+	if (gDoLogging)
+	{
+		FILE* f = fopen("c:\\tcf\\vscommlog.txt", "at");
+		fprintf(f, "connectSettings=%x connectionId=%d, protocol=%x\n", connectSettings, connectionId, protocol);
+		fprintf(f, "connectSettings->comPort=%s\n", connectSettings->virtualSerialSettings.comPort);
+		fclose(f);
+	}
+#endif
+	m_connId = connectionId;
+	m_Protocol = protocol;
+
+	m_ConnectSettings = new ConnectData();
+	memcpy(m_ConnectSettings, connectSettings, sizeof(ConnectData));
+
+#if (defined(LOG_COMM) || defined(LOG_PROCCOMM)) && defined(_DEBUG)
+	if (gDoLogging)
+	{
+		m_CommDebugLog = new TCDebugLog("TCF_Comm", connectionId, 2000L);
+		m_ProcDebugLog = new TCDebugLog("TCF_CommP", connectionId, 2000L);
+	}
+#endif
+	pRealSerialConnectData pR = &m_ConnectSettings->realSerialSettings;
+	pVirtualSerialConnectData pV = &m_ConnectSettings->virtualSerialSettings;
+
+	// copy com port to real settings
+	strcpy(pR->comPort, pV->comPort);
+
+	// fill in real setting defaults
+	pR->baudRate = 115200;
+	pR->dataBits = 8;
+	pR->flowControl = eFlowControlNone;
+	pR->parity = eParityNone;
+	pR->stopBits = eStopBits1;
+}
+
+VirtualSerialComm::~VirtualSerialComm()
+{
+#ifdef _DEBUG
+	if (gDoLogging)
+	{
+		FILE* f = fopen("c:\\tcf\\vscommlog.txt", "at");
+		fprintf(f, "VirtualSerialComm::~VirtualSerialComm()\n");
+		fclose(f);
+	}
+#endif
+}
+bool VirtualSerialComm::IsConnectionEqual(ConnectData* pConn)
+{
+	bool equal = false;
+
+	// forms accepted:
+	//   "comNN", "NN"
+	char* ptr1 = m_ConnectSettings->virtualSerialSettings.comPort;
+	char* ptr2 = pConn->virtualSerialSettings.comPort;
+	bool digit1found = false;
+	while(!digit1found && *ptr1 != NULL) 
+	{
+		if (*ptr1 >= '0' && *ptr1 <= '9')
+		{
+			digit1found = true;
+			break;
+		}
+		ptr1++;
+	}
+	bool digit2found = false;
+	while(!digit2found && *ptr2 != NULL) 
+	{
+		if (*ptr2 >= '0' && *ptr2 <= '9')
+		{
+			digit2found = true;
+			break;
+		}
+		ptr2++;
+	}
+	if (digit1found && digit2found)
+	{
+		if (strcmp(ptr1, ptr2) == 0)
+			equal = true;
+	}
+	return equal;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/VirtualSerialComm.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// VirtualSerialComm1.h: interface for the VirtualSerialComm class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_VIRTUALSERIALCOMM1_H__C5549E09_44AA_4DD2_9DD0_56054DCA0C20__INCLUDED_)
+#define AFX_VIRTUALSERIALCOMM1_H__C5549E09_44AA_4DD2_9DD0_56054DCA0C20__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "RealSerialComm.h"
+
+class VirtualSerialComm : public CRealSerialComm  
+{
+public:
+	VirtualSerialComm();
+	VirtualSerialComm(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol);
+	virtual ~VirtualSerialComm();
+
+	virtual bool IsConnectionEqual(ConnectData* pConn);
+};
+
+#endif // !defined(AFX_VIRTUALSERIALCOMM1_H__C5549E09_44AA_4DD2_9DD0_56054DCA0C20__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFCommVirtualSerial/copyBinaries.cmd	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,5 @@
+echo off
+echo Copy binaries to ..\..\..\os\win32\x86
+copy /V %1\TCFCommVirtualSerial.dll ..\..\..\os\win32\x86
+copy /V %1\TCFCommVirtualSerial.lib ..\..\..\os\win32\x86
+copy /V %1\TCFCommVirtualSerial.map ..\..\..\os\win32\x86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFNative.dsw	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,89 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "TCFClient"=.\TCFClient\TCFClient.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "TCFCommSerial"=.\TCFCommSerial\TCFCommSerial.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "TCFCommTCP"=.\TCFCommTCP\TCFCommTCP.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "TCFCommVirtualSerial"=.\TCFCommVirtualSerial\TCFCommVirtualSerial.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "TCFProtOST"=.\TCFProtOST\TCFProtOST.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Project: "TCFServer"=.\TCFServer\TCFServer.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
Binary file connectivity/com.nokia.tcf/native/TCFNative/TCFNative.ncb has changed
Binary file connectivity/com.nokia.tcf/native/TCFNative/TCFNative.opt has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/OSTProtocol.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// OSTProtocol.cpp: implementation of the COSTProtocol class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "OSTProtocol.h"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+COSTProtocol::COSTProtocol()
+{
+
+}
+
+COSTProtocol::~COSTProtocol()
+{
+
+}
+BOOL COSTProtocol::DecodeMessage(BYTE* fullMessage, DWORD& fullMessageLength, BYTE& msgId, BYTE*& rawMessage, DWORD& rawLength)
+{
+	BOOL found = FALSE;
+
+	WORD msgLen = MAKEWORD(fullMessage[OST_LEN_BYTE_1+1], fullMessage[OST_LEN_BYTE_1]);
+	if (fullMessageLength >= (WORD)(msgLen + OST_HDR_LEN_1))
+	{
+		msgId = fullMessage[OST_PROT_BYTE_1];
+		rawMessage = &fullMessage[OST_MSG_BYTE_1];
+		rawLength = msgLen;
+		fullMessageLength = msgLen+OST_HDR_LEN_1;
+		found = TRUE;
+	}
+
+	return found;
+}
+
+DWORD COSTProtocol::EncodeMessage(BYTE* rawMessage, DWORD rawLength, BYTE protocolVersion, BYTE msgId, BYTE* fullMessage, DWORD maxFullLength)
+{
+	DWORD outLength = 0;
+
+	fullMessage[OST_VER_BYTE_1] = protocolVersion;
+	fullMessage[OST_PROT_BYTE_1] = msgId;
+	fullMessage[OST_LEN_BYTE_1] = (BYTE)((rawLength >> 8) & 0xff);
+	fullMessage[OST_LEN_BYTE_1+1] = (BYTE)(rawLength & 0xff);
+	if (rawLength > 0)
+	{
+		memcpy(&fullMessage[OST_MSG_BYTE_1], rawMessage, rawLength);
+	}
+	outLength = rawLength + OST_HDR_LEN_1;
+
+	return outLength;
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/OSTProtocol.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// OSTProtocol.h: interface for the COSTProtocol class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_OSTPROTOCOL_H__6A8FE0C0_A365_4649_8665_EFCCA002A707__INCLUDED_)
+#define AFX_OSTPROTOCOL_H__6A8FE0C0_A365_4649_8665_EFCCA002A707__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "BaseProtocol.h"
+// Version 1 offsets
+#define OST_HDR_LEN_1	4	// header length
+#define OST_VER_BYTE_1	0	// byte that contains the version
+#define OST_PROT_BYTE_1	1	// protocol byte
+#define OST_LEN_BYTE_1	2	// first byte of length (bytes 2-3)
+#define OST_MSG_BYTE_1	4	// start of message bytes
+	
+// Protocol constants
+#define OST_PROT_OST_SYSTEM			(0x00)	// OST System messages
+#define OST_PROT_OST_ACTIVATION		(0x01)	// OST Activation messages
+#define OST_PROT_OST_ASCII			(0x02)	// OST ASCII messages
+#define OST_PROT_OST_SIMPLE			(0x03)	// OST Simple messages
+#define OST_PROT_OST_EXTENSIBLE		(0x04)	// OST Extensible messages 
+#define OST_PROT_OST_SYMBIAN		(0x05)	// OST Symbian messages
+#define OST_PROT_TRK				(0x90)	// OST TRK messages
+#define OST_PROT_TC					(0x91)	// OST TraceCore messages
+
+class COSTProtocol : public CBaseProtocol  
+{
+public:
+	COSTProtocol();
+	virtual ~COSTProtocol();
+
+	BOOL DecodeMessage(BYTE* fullMessage, DWORD& fullLength, BYTE& msgId, BYTE*& rawMessage, DWORD& rawLength);
+	DWORD EncodeMessage(BYTE* rawMessage, DWORD rawLength, BYTE protocolVersion, BYTE msgId, BYTE* fullMessage, DWORD maxFullLength);
+	DWORD GetHeaderLength() { return OST_HDR_LEN_1; }
+};
+
+#endif // !defined(AFX_OSTPROTOCOL_H__6A8FE0C0_A365_4649_8665_EFCCA002A707__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/ReadMe.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,37 @@
+========================================================================
+       DYNAMIC LINK LIBRARY : TCFProtOST
+========================================================================
+
+
+AppWizard has created this TCFProtOST DLL for you.  
+
+This file contains a summary of what you will find in each of the files that
+make up your TCFProtOST application.
+
+TCFProtOST.dsp
+    This file (the project file) contains information at the project level and
+    is used to build a single project or subproject. Other users can share the
+    project (.dsp) file, but they should export the makefiles locally.
+
+TCFProtOST.cpp
+    This is the main DLL source file.
+
+TCFProtOST.h
+    This file contains your DLL exports.
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+    These files are used to build a precompiled header (PCH) file
+    named TCFProtOST.pch and a precompiled types file named StdAfx.obj.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+
+/////////////////////////////////////////////////////////////////////////////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/StdAfx.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// stdafx.cpp : source file that includes just the standard includes
+//	TCFProtOST.pch will be the pre-compiled header
+//	stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/StdAfx.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// stdafx.h : include file for standard system include files,
+//  or project specific include files that are used frequently, but
+//      are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__FEC75CA3_A547_455E_AD43_CD2A8594423F__INCLUDED_)
+#define AFX_STDAFX_H__FEC75CA3_A547_455E_AD43_CD2A8594423F__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+
+// Insert your headers here
+#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
+
+#include <stdlib.h>
+#include <windows.h>
+
+// TODO: reference additional headers your program requires here
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__FEC75CA3_A547_455E_AD43_CD2A8594423F__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/TCFProtOST.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// TCFProtOST.cpp : Defines the entry point for the DLL application.
+//
+
+#include "stdafx.h"
+#include "TCFProtOST.h"
+#include "OSTProtocol.h"
+
+static const char* pProtocol="ost";
+static COSTProtocol* pProtocolClass=NULL;
+
+BOOL APIENTRY DllMain( HANDLE hModule, 
+                       DWORD  ul_reason_for_call, 
+                       LPVOID lpReserved
+					 )
+{
+    switch (ul_reason_for_call)
+	{
+		case DLL_PROCESS_ATTACH:
+		case DLL_THREAD_ATTACH:
+		case DLL_THREAD_DETACH:
+		case DLL_PROCESS_DETACH:
+			break;
+    }
+    return TRUE;
+}
+
+TCFPROTOST_API const char* RegisterProtocol()
+{
+	return pProtocol;
+}
+
+TCFPROTOST_API CBaseProtocol* CreateProtocol()
+{
+	pProtocolClass = new COSTProtocol();
+	return pProtocolClass;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/TCFProtOST.dep	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,20 @@
+# Microsoft Developer Studio Generated Dependency File, included by TCFProtOST.mak
+
+..\TCFServer\BaseProtocol.cpp : \
+	"..\TCFServer\BaseProtocol.h"\
+	
+
+.\OSTProtocol.cpp : \
+	"..\TCFServer\BaseProtocol.h"\
+	".\OSTProtocol.h"\
+	
+
+.\StdAfx.cpp : \
+	".\StdAfx.h"\
+	
+
+.\TCFProtOST.cpp : \
+	"..\TCFServer\BaseProtocol.h"\
+	".\OSTProtocol.h"\
+	".\TCFProtOST.h"\
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/TCFProtOST.dsp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,146 @@
+# Microsoft Developer Studio Project File - Name="TCFProtOST" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=TCFProtOST - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFProtOST.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFProtOST.mak" CFG="TCFProtOST - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "TCFProtOST - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFProtOST - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "TCFProtOST - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Yu"stdafx.h" /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /map /machine:I386
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copyBinaries Release
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "TCFProtOST - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /map /debug /machine:I386 /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+PostBuild_Cmds=copyBinaries Debug
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "TCFProtOST - Win32 Release"
+# Name "TCFProtOST - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=..\TCFServer\BaseProtocol.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\OSTProtocol.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFProtOST.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\OSTProtocol.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFProtOST.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# End Group
+# Begin Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# End Target
+# End Project
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/TCFProtOST.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "BaseProtocol.h"
+// The following ifdef block is the standard way of creating macros which make exporting 
+// from a DLL simpler. All files within this DLL are compiled with the TCFPROTOST_EXPORTS
+// symbol defined on the command line. this symbol should not be defined on any project
+// that uses this DLL. This way any other project whose source files include this file see 
+// TCFPROTOST_API functions as being imported from a DLL, wheras this DLL sees symbols
+// defined with this macro as being exported.
+#ifdef TCFPROTOST_EXPORTS
+#define TCFPROTOST_API __declspec(dllexport)
+#else
+#define TCFPROTOST_API __declspec(dllimport)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+TCFPROTOST_API const char* RegisterProtocol();
+TCFPROTOST_API CBaseProtocol* CreateProtocol();
+
+#ifdef __cplusplus
+}
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/TCFProtOST.mak	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,272 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on TCFProtOST.dsp
+!IF "$(CFG)" == ""
+CFG=TCFProtOST - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to TCFProtOST - Win32 Debug.
+!ENDIF 
+
+!IF "$(CFG)" != "TCFProtOST - Win32 Release" && "$(CFG)" != "TCFProtOST - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFProtOST.mak" CFG="TCFProtOST - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "TCFProtOST - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "TCFProtOST - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE 
+!ERROR An invalid configuration is specified.
+!ENDIF 
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE 
+NULL=nul
+!ENDIF 
+
+!IF  "$(CFG)" == "TCFProtOST - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFProtOST.dll"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\BaseProtocol.obj"
+	-@erase "$(INTDIR)\OSTProtocol.obj"
+	-@erase "$(INTDIR)\StdAfx.obj"
+	-@erase "$(INTDIR)\TCFProtOST.obj"
+	-@erase "$(INTDIR)\TCFProtOST.pch"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(OUTDIR)\TCFProtOST.dll"
+	-@erase "$(OUTDIR)\TCFProtOST.exp"
+	-@erase "$(OUTDIR)\TCFProtOST.lib"
+	-@erase "$(OUTDIR)\TCFProtOST.map"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"$(INTDIR)\TCFProtOST.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "NDEBUG" /mktyplib203 /win32 
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFProtOST.bsc" 
+BSC32_SBRS= \
+	
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /pdb:"$(OUTDIR)\TCFProtOST.pdb" /map:"$(INTDIR)\TCFProtOST.map" /machine:I386 /out:"$(OUTDIR)\TCFProtOST.dll" /implib:"$(OUTDIR)\TCFProtOST.lib" 
+LINK32_OBJS= \
+	"$(INTDIR)\BaseProtocol.obj" \
+	"$(INTDIR)\OSTProtocol.obj" \
+	"$(INTDIR)\StdAfx.obj" \
+	"$(INTDIR)\TCFProtOST.obj"
+
+"$(OUTDIR)\TCFProtOST.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFProtOST.dll"
+   copyBinaries Release
+	echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF  "$(CFG)" == "TCFProtOST - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFProtOST.dll"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\BaseProtocol.obj"
+	-@erase "$(INTDIR)\OSTProtocol.obj"
+	-@erase "$(INTDIR)\StdAfx.obj"
+	-@erase "$(INTDIR)\TCFProtOST.obj"
+	-@erase "$(INTDIR)\TCFProtOST.pch"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(INTDIR)\vc60.pdb"
+	-@erase "$(OUTDIR)\TCFProtOST.dll"
+	-@erase "$(OUTDIR)\TCFProtOST.exp"
+	-@erase "$(OUTDIR)\TCFProtOST.ilk"
+	-@erase "$(OUTDIR)\TCFProtOST.lib"
+	-@erase "$(OUTDIR)\TCFProtOST.map"
+	-@erase "$(OUTDIR)\TCFProtOST.pdb"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"$(INTDIR)\TCFProtOST.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+MTL=midl.exe
+MTL_PROJ=/nologo /D "_DEBUG" /mktyplib203 /win32 
+RSC=rc.exe
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFProtOST.bsc" 
+BSC32_SBRS= \
+	
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"$(OUTDIR)\TCFProtOST.pdb" /map:"$(INTDIR)\TCFProtOST.map" /debug /machine:I386 /out:"$(OUTDIR)\TCFProtOST.dll" /implib:"$(OUTDIR)\TCFProtOST.lib" /pdbtype:sept 
+LINK32_OBJS= \
+	"$(INTDIR)\BaseProtocol.obj" \
+	"$(INTDIR)\OSTProtocol.obj" \
+	"$(INTDIR)\StdAfx.obj" \
+	"$(INTDIR)\TCFProtOST.obj"
+
+"$(OUTDIR)\TCFProtOST.dll" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy libs
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFProtOST.dll"
+   copyBinaries Debug
+	echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF 
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("TCFProtOST.dep")
+!INCLUDE "TCFProtOST.dep"
+!ELSE 
+!MESSAGE Warning: cannot find "TCFProtOST.dep"
+!ENDIF 
+!ENDIF 
+
+
+!IF "$(CFG)" == "TCFProtOST - Win32 Release" || "$(CFG)" == "TCFProtOST - Win32 Debug"
+SOURCE=..\TCFServer\BaseProtocol.cpp
+
+"$(INTDIR)\BaseProtocol.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFProtOST.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+SOURCE=.\OSTProtocol.cpp
+
+"$(INTDIR)\OSTProtocol.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFProtOST.pch"
+
+
+SOURCE=.\StdAfx.cpp
+
+!IF  "$(CFG)" == "TCFProtOST - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"$(INTDIR)\TCFProtOST.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+"$(INTDIR)\StdAfx.obj"	"$(INTDIR)\TCFProtOST.pch" : $(SOURCE) "$(INTDIR)"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF  "$(CFG)" == "TCFProtOST - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"$(INTDIR)\TCFProtOST.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+"$(INTDIR)\StdAfx.obj"	"$(INTDIR)\TCFProtOST.pch" : $(SOURCE) "$(INTDIR)"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF 
+
+SOURCE=.\TCFProtOST.cpp
+
+"$(INTDIR)\TCFProtOST.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFProtOST.pch"
+
+
+
+!ENDIF 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/TCFProtOST.plg	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,409 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: TCFClient - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating command line "rc.exe /l 0x409 /fo"Release/resource.res" /d "NDEBUG" "C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\resource.rc"" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28AE.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"Release/TCFClient.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\ClientManager.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\ErrorMonitorData.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\InputStream.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\ServerClient.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\shareddata.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\TCAPIConnectionJni.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\TCFClient.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\TCFCppApi.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28AE.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28AF.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"Release/TCFClient.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFClient\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28AF.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B0.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib shlwapi.lib /nologo /dll /incremental:no /pdb:"Release/TCFClient.pdb" /map:"Release/TCFClient.map" /machine:I386 /out:"Release/TCFClient.dll" /implib:"Release/TCFClient.lib" 
+.\Release\ClientManager.obj
+.\Release\ErrorMonitorData.obj
+.\Release\InputStream.obj
+.\Release\mutex.obj
+.\Release\ServerClient.obj
+.\Release\shareddata.obj
+.\Release\StdAfx.obj
+.\Release\TCAPIConnectionJni.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFClient.obj
+.\Release\TCFCppApi.obj
+.\Release\resource.res
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B0.tmp"
+<h3>Output Window</h3>
+Compiling resources...
+Compiling...
+StdAfx.cpp
+Compiling...
+ClientManager.cpp
+ErrorMonitorData.cpp
+InputStream.cpp
+mutex.cpp
+ServerClient.cpp
+shareddata.cpp
+TCAPIConnectionJni.cpp
+TCDebugLog.cpp
+TCFClient.cpp
+TCFCppApi.cpp
+Generating Code...
+Linking...
+   Creating library Release/TCFClient.lib and object Release/TCFClient.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B4.bat" with contents
+[
+@echo off
+copybinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B4.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFClient.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommSerial - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B5.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"Release/TCFCommSerial.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommSerial\RealSerialComm.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommSerial\TCFCommSerial.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B5.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B6.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"Release/TCFCommSerial.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommSerial\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B6.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B7.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /pdb:"Release/TCFCommSerial.pdb" /map:"Release/TCFCommSerial.map" /machine:I386 /out:"Release/TCFCommSerial.dll" /implib:"Release/TCFCommSerial.lib" 
+.\Release\BaseCom.obj
+.\Release\mutex.obj
+.\Release\RealSerialComm.obj
+.\Release\StdAfx.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFCommSerial.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28B7.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+RealSerialComm.cpp
+TCDebugLog.cpp
+TCFCommSerial.cpp
+Generating Code...
+Linking...
+   Creating library Release/TCFCommSerial.lib and object Release/TCFCommSerial.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28BB.bat" with contents
+[
+@echo off
+copyBinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28BB.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommSerial.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommTCP - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28BC.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /Fp"Release/TCFCommTCP.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommTCP\TCFCommTCP.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommTCP\TcpComm.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28BC.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28BD.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /Fp"Release/TCFCommTCP.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommTCP\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28BD.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28BE.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib shlwapi.lib /nologo /dll /incremental:no /pdb:"Release/TCFCommTCP.pdb" /map:"Release/TCFCommTCP.map" /machine:I386 /out:"Release/TCFCommTCP.dll" /implib:"Release/TCFCommTCP.lib" 
+.\Release\BaseCom.obj
+.\Release\mutex.obj
+.\Release\StdAfx.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFCommTCP.obj
+.\Release\TcpComm.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28BE.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+TCDebugLog.cpp
+TCFCommTCP.cpp
+TcpComm.cpp
+Generating Code...
+Linking...
+   Creating library Release/TCFCommTCP.lib and object Release/TCFCommTCP.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C2.bat" with contents
+[
+@echo off
+copybinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C2.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommTCP.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommVirtualSerial - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C3.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"Release/TCFCommVirtualSerial.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommSerial\RealSerialComm.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\TCFCommVirtualSerial.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\VirtualSerialComm.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C3.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C4.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"Release/TCFCommVirtualSerial.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C4.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C5.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /pdb:"Release/TCFCommVirtualSerial.pdb" /map:"Release/TCFCommVirtualSerial.map" /machine:I386 /out:"Release/TCFCommVirtualSerial.dll" /implib:"Release/TCFCommVirtualSerial.lib" 
+.\Release\BaseCom.obj
+.\Release\mutex.obj
+.\Release\RealSerialComm.obj
+.\Release\StdAfx.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFCommVirtualSerial.obj
+.\Release\VirtualSerialComm.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C5.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+RealSerialComm.cpp
+TCDebugLog.cpp
+TCFCommVirtualSerial.cpp
+VirtualSerialComm.cpp
+Generating Code...
+Linking...
+   Creating library Release/TCFCommVirtualSerial.lib and object Release/TCFCommVirtualSerial.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C9.bat" with contents
+[
+@echo off
+copyBinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28C9.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommVirtualSerial.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFProtOST - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28CA.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"Release/TCFProtOST.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\BaseProtocol.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFProtOST\OSTProtocol.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFProtOST\TCFProtOST.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28CA.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28CB.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"Release/TCFProtOST.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFProtOST\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28CB.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28CC.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /pdb:"Release/TCFProtOST.pdb" /map:"Release/TCFProtOST.map" /machine:I386 /out:"Release/TCFProtOST.dll" /implib:"Release/TCFProtOST.lib" 
+.\Release\BaseProtocol.obj
+.\Release\OSTProtocol.obj
+.\Release\StdAfx.obj
+.\Release\TCFProtOST.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28CC.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseProtocol.cpp
+OSTProtocol.cpp
+TCFProtOST.cpp
+Generating Code...
+Linking...
+   Creating library Release/TCFProtOST.lib and object Release/TCFProtOST.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D0.bat" with contents
+[
+@echo off
+copyBinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D0.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFProtOST.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFServer - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating command line "rc.exe /l 0x409 /fo"Release/resource.res" /d "NDEBUG" "C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\resource.rc"" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D1.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Release/TCFServer.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\Client.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\CommRegistryItem.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\Connection.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\ConnectionImpl.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\ErrorMonitorData.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\InputStream.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\MessageFile.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\ProtocolRegistryItem.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\Registry.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\RegistryImpl.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\ServerClient.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\ServerManager.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\shareddata.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\TCFServer.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D1.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D2.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Release/TCFServer.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\Symbian\Carbide\devspace_203_0316\com.nokia.tcf\native\TCFNative\TCFServer\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D2.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D3.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib shlwapi.lib /nologo /subsystem:console /incremental:no /pdb:"Release/TCFServer.pdb" /machine:I386 /out:"Release/TCFServer.exe" 
+.\Release\Client.obj
+.\Release\CommRegistryItem.obj
+.\Release\Connection.obj
+.\Release\ConnectionImpl.obj
+.\Release\ErrorMonitorData.obj
+.\Release\InputStream.obj
+.\Release\MessageFile.obj
+.\Release\mutex.obj
+.\Release\ProtocolRegistryItem.obj
+.\Release\Registry.obj
+.\Release\RegistryImpl.obj
+.\Release\ServerClient.obj
+.\Release\ServerManager.obj
+.\Release\shareddata.obj
+.\Release\StdAfx.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFServer.obj
+.\Release\resource.res
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D3.tmp"
+<h3>Output Window</h3>
+Compiling resources...
+Compiling...
+StdAfx.cpp
+Compiling...
+Client.cpp
+CommRegistryItem.cpp
+Connection.cpp
+ConnectionImpl.cpp
+ErrorMonitorData.cpp
+InputStream.cpp
+MessageFile.cpp
+mutex.cpp
+ProtocolRegistryItem.cpp
+Registry.cpp
+RegistryImpl.cpp
+ServerClient.cpp
+ServerManager.cpp
+shareddata.cpp
+TCDebugLog.cpp
+TCFServer.cpp
+Generating Code...
+Linking...
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D5.bat" with contents
+[
+@echo off
+copybinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP28D5.bat"
+copy binary
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFServer.exe - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFProtOST/copyBinaries.cmd	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,5 @@
+echo off
+echo Copy binaries to ..\..\..\os\win32\x86
+copy /V %1\TCFProtOST.dll ..\..\..\os\win32\x86
+copy /V %1\TCFProtOST.lib ..\..\..\os\win32\x86
+copy /V %1\TCFProtOST.map ..\..\..\os\win32\x86
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/BaseCom.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "stdafx.h"
+#include "BaseCom.h"
+
+CBaseCom::CBaseCom()
+{
+#ifdef _DEBUG
+	if (gDoLogging)
+	{
+		FILE* f = fopen("c:\\tcf\\basecommlog.txt", "at");
+		fprintf(f, "CBaseCom::CBaseCom() (default constructor)\n");
+		fclose(f);
+	}
+#endif
+	m_isConnected = false;
+	m_pBuffer = NULL;
+	m_numberBytes = 0;
+	m_ConnectSettings = NULL;
+	m_lastCommError = 0;
+	m_CommDebugLog = NULL;
+	m_ProcDebugLog = NULL;
+	m_connId = -1;
+	m_Protocol = NULL;
+}
+
+CBaseCom::CBaseCom(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol)
+{
+#ifdef _DEBUG
+	if (gDoLogging)
+	{
+		FILE* f = fopen("c:\\tcf\\basecommlog.txt", "at");
+		fprintf(f, "connectSettings=%x connectionId=%d, protocol=%x\n", connectSettings, connectionId, protocol);
+		fclose(f);
+	}
+#endif
+	m_isConnected = false;
+	m_pBuffer = NULL;
+	m_numberBytes = 0;
+	m_ConnectSettings = NULL;
+	m_lastCommError = 0;
+	m_CommDebugLog = NULL;
+	m_ProcDebugLog = NULL;
+
+	m_connId = connectionId;
+	m_Protocol = protocol;
+
+	m_ConnectSettings = new ConnectData();
+	memcpy(m_ConnectSettings, connectSettings, sizeof(ConnectData));
+
+#if (defined(LOG_COMM) || defined(LOG_PROCCOMM)) && defined(_DEBUG)
+	if (gDoLogging)
+	{
+		m_CommDebugLog = new TCDebugLog("TCF_Comm", connectionId, 2000L);
+		m_ProcDebugLog = new TCDebugLog("TCF_CommP", connectionId, 2000L);
+	}
+#endif
+}
+
+CBaseCom::~CBaseCom()
+{
+#ifdef _DEBUG
+	if (gDoLogging)
+	{
+		FILE* f = fopen("c:\\tcf\\basecommlog.txt", "at");
+		fprintf(f, "CBaseCom::~CBaseCom()\n");
+		fclose(f);
+	}
+#endif
+	if (m_pBuffer)
+		delete[] m_pBuffer;
+
+	if (m_ConnectSettings)
+		delete m_ConnectSettings;
+
+	if (m_CommDebugLog)
+		delete m_CommDebugLog;
+
+	if (m_ProcDebugLog)
+		delete m_ProcDebugLog;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/BaseCom.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,127 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#ifndef __BASECOM_H__
+#define __BASECOM_H__
+#include "Registry.h"
+#include "ServerClient.h"
+#include "TCConstants.h"
+#include "TCErrorConstants.h"
+#include "BaseProtocol.h"
+#include "TCDebugLog.h"
+#include <time.h>
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+#define LOG_COMM
+#if defined(LOG_COMM) && defined(_DEBUG)
+
+#define COMMLOGOPEN() if (gDoLogging) { if (m_CommDebugLog) m_CommDebugLog->WaitForAccess(); }
+#define COMMLOGS(s) if (gDoLogging) { sprintf(m_CommDebugLogMsg,"%s", s); if (m_CommDebugLog) m_CommDebugLog->log(m_CommDebugLogMsg); }
+#define COMMLOGA1(s, a1) if (gDoLogging) { sprintf(m_CommDebugLogMsg, s, a1); if (m_CommDebugLog) m_CommDebugLog->log(m_CommDebugLogMsg); }
+#define COMMLOGA2(s, a1, a2) if (gDoLogging) { sprintf(m_CommDebugLogMsg, s, a1, a2); if (m_CommDebugLog) m_CommDebugLog->log(m_CommDebugLogMsg); }
+#define COMMLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(m_CommDebugLogMsg, s, a1, a2, a3); if (m_CommDebugLog) m_CommDebugLog->log(m_CommDebugLogMsg); }
+#define COMMLOGA4(s, a1, a2, a3, a4) if (gDoLogging) { sprintf(m_CommDebugLogMsg, s, a1, a2, a3, a4); if (m_CommDebugLog) m_CommDebugLog->log(m_CommDebugLogMsg); }
+#define COMMLOGCLOSE() if (gDoLogging) { if (m_CommDebugLog) m_CommDebugLog->ReleaseAccess(); }
+#else
+#define COMMLOGOPEN()
+#define COMMLOGS(s)
+#define COMMLOGA1(s, a1)
+#define COMMLOGA2(s, a1, a2)
+#define COMMLOGA3(s, a1, a2, a3)
+#define COMMLOGA4(s, a1, a2, a3, a4)
+#define COMMLOGCLOSE()
+#endif
+
+#define LOG_PROCCOMM
+#if defined(LOG_PROCCOMM) && defined(_DEBUG)
+#define PROCLOGOPEN() if (gDoLogging) { m_ProcDebugLog->WaitForAccess(); }
+#define PROCLOGS(s) if (gDoLogging) { sprintf(m_ProcDebugLogMsg,"%s", s); m_ProcDebugLog->log(m_ProcDebugLogMsg); }
+#define PROCLOGA1(s, a1) if (gDoLogging) { sprintf(m_ProcDebugLogMsg, s, a1); m_ProcDebugLog->log(m_ProcDebugLogMsg); }
+#define PROCLOGA2(s, a1, a2) if (gDoLogging) { sprintf(m_ProcDebugLogMsg, s, a1, a2); m_ProcDebugLog->log(m_ProcDebugLogMsg); }
+#define PROCLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(m_ProcDebugLogMsg, s, a1, a2, a3); m_ProcDebugLog->log(m_ProcDebugLogMsg); }
+#define PROCLOGA4(s, a1, a2, a3, a4) if (gDoLogging) { sprintf(m_ProcDebugLogMsg, s, a1, a2, a3, a4); m_ProcDebugLog->log(m_ProcDebugLogMsg); }
+#define PROCLOGA5(s, a1, a2, a3, a4, a5) if (gDoLogging) { sprintf(m_ProcDebugLogMsg, s, a1, a2, a3, a4, a5); m_ProcDebugLog->log(m_ProcDebugLogMsg); }
+#define PROCLOGCLOSE() if (gDoLogging) { m_ProcDebugLog->ReleaseAccess(); }
+#else
+#define PROCLOGOPEN()
+#define PROCLOGS(s)
+#define PROCLOGA1(s, a1)
+#define PROCLOGA2(s, a1, a2)
+#define PROCLOGA3(s, a1, a2, a3)
+#define PROCLOGA4(s, a1, a2, a3, a4)
+#define PROCLOGA5(s, a1, a2, a3, a4, a5)
+#define PROCLOGCLOSE()
+#endif
+
+class CConnection;
+class CBaseProtocol;
+
+class CBaseCom
+{
+public:
+	CBaseCom();
+	CBaseCom(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol);
+	virtual ~CBaseCom();
+
+//	void SetConnectSettings(ConnectData* connectSettings);
+//	void SetProtocol(CBaseProtocol* protocol) { m_Protocol = protocol; }
+//	void SetConnectionId(DWORD id);
+
+	virtual long OpenPort()=0;
+	virtual long ClosePort()=0;
+	virtual long SendDataToPort(DWORD inSize, const void* inData)=0;
+	virtual long PollPort(DWORD& outSize)=0;
+	virtual long ReadPort(DWORD inSize, void* outData, DWORD& outSize)=0;
+	virtual long ProcessBuffer(CConnection* pConn, CRegistry* pRegistry, long& numberProcessed)=0;
+	virtual void DeleteMsg(DWORD inMsgLength)=0;
+	virtual bool IsConnected() { return m_isConnected; }
+	virtual bool GetVersion(char* outVersion)=0; // get version of whatever we're connected to
+	virtual bool HasVersion()=0; // does this connection have a version?
+	virtual long PreProcessMessage(int inMsgType, DWORD inMsgLength, BYTE* inMessage)=0;
+	virtual long PreProcessMessage(BYTE msgId, DWORD inMsgLength, BYTE* inMessage)=0;
+	virtual bool IsConnectionEqual(ConnectData* pConn)=0;
+
+	BYTE* m_pBuffer;
+	DWORD m_numberBytes;
+	bool m_isConnected;
+	DWORD m_connId;
+
+	ConnectData* m_ConnectSettings; // from connection
+	CBaseProtocol* m_Protocol;		// used for this connection
+
+	// for Open/Close/Send thread
+	char m_CommDebugLogMsg[2000];
+	TCDebugLog* m_CommDebugLog;
+
+	// for Poll/Read/Process/PreProcess thread
+	char m_ProcDebugLogMsg[2000];
+	TCDebugLog* m_ProcDebugLog;
+
+	DWORD m_lastCommError;
+};
+
+typedef const char* (*COMMREGISTER)(void);
+typedef CBaseCom* (*COMMCREATE)(ConnectData* connectSettings, DWORD connectionId, CBaseProtocol* protocol);
+
+#define COMMREGISTER_FNNAME	"RegisterComm"
+#define COMMCREATE_FNNAME	"CreateComm"
+
+#define COMMDLL_BASENAME	"TCFComm"
+
+#endif __BASECOM_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/BaseProtocol.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// BaseProtocol.cpp: implementation of the CBaseProtocol class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "BaseProtocol.h"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CBaseProtocol::CBaseProtocol()
+{
+
+}
+
+CBaseProtocol::~CBaseProtocol()
+{
+
+}
+
+DWORD CBaseProtocol::GetHeaderLength()
+{
+	return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/BaseProtocol.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// BaseProtocol.h: interface for the CBaseProtocol class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_BASEPROTOCOL_H__EABB80B6_353C_45AE_8976_AE0C0D93AC84__INCLUDED_)
+#define AFX_BASEPROTOCOL_H__EABB80B6_353C_45AE_8976_AE0C0D93AC84__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+class CBaseProtocol  
+{
+public:
+	CBaseProtocol();
+	virtual ~CBaseProtocol();
+
+	// used to decode a message into header/message parts
+	virtual BOOL DecodeMessage(BYTE* fullMessage, DWORD& fullLength, BYTE& msgId, BYTE*& rawMessage, DWORD& rawLength)=0;
+
+	// used to encode a raw message (prefixes any protocol headers)
+	virtual DWORD EncodeMessage(BYTE* rawMessage, DWORD rawLength, BYTE protocolVersion, BYTE msgId, BYTE* fullMessage, DWORD maxFullLength)=0;
+
+	// used to query how many bytes the header is so the caller can allocate enough memory
+	virtual DWORD GetHeaderLength()=0;
+
+};
+
+typedef const char* (*PROTOCOLREGISTER)(void);
+typedef CBaseProtocol* (*PROTOCOLCREATE)(void);
+
+#define PROTOCOLREGISTER_FNNAME	"RegisterProtocol"
+#define PROTOCOLCREATE_FNNAME	"CreateProtocol"
+
+#define PROTOCOLDLL_BASENAME	"TCFProt"
+
+#endif // !defined(AFX_BASEPROTOCOL_H__EABB80B6_353C_45AE_8976_AE0C0D93AC84__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/Client.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,173 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// Client.cpp: implementation of the CClient class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "Client.h"
+#include "ServerManager.h"
+
+extern CServerManager* gManager;
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+//#define LOG_CLIENT
+#if defined(LOG_CLIENT) && defined(_DEBUG)
+extern char TCDebugMsg[];
+#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { gManager->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CClient::CClient()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CClient::CClient\n");
+	
+	m_InputStream = NULL;
+	m_MessageFile = NULL;
+	m_ErrorMonitor = NULL;
+	m_Connection = NULL;
+	m_Status = eStopped;
+	m_ClientId = -1;
+	m_Options.ostVersion = 1;
+	m_Options.unWrapFormat = DEFAULT_UNWRAP_OPTION;
+	m_MessageDestination = eDestinationInputStream;	// default - changed later
+
+	TCDEBUGCLOSE();
+}
+
+CClient::CClient(CConnection* connection, ClientOptions& options, DWORD clientId)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CClient::CClient\n");
+	
+	m_Connection = connection;
+	m_Options.ostVersion = options.ostVersion;
+	m_Options.unWrapFormat = options.unWrapFormat;
+	m_ClientId = clientId;
+	m_Status = eStopped;
+
+	m_ErrorMonitor = new CErrorMonitor(m_ClientId);
+	m_ErrorMonitor->CreateData();
+	m_InputStream = NULL; // created on open instead
+	m_MessageFile = NULL;
+	m_MessageDestination = eDestinationInputStream;	// default - changed later
+
+
+	TCDEBUGCLOSE();
+}
+CClient::~CClient()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CClient::~CClient\n");
+	
+	if (m_ErrorMonitor)
+		delete m_ErrorMonitor;
+
+	if (m_InputStream)
+		delete m_InputStream;
+
+	if (m_MessageFile)
+		delete m_MessageFile;
+
+	TCDEBUGCLOSE();
+}
+BOOL CClient::OpenStream(DestinationOptions* streamOptions)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CClient::OpenStream\n");
+	
+	BOOL done = TRUE;
+
+	if (m_InputStream == NULL)
+	{
+		m_InputStream = new CInputStream(streamOptions->destinationFile, streamOptions->streamSize, streamOptions->overFlowToFile, m_ClientId);
+		m_InputStream->CreateStream();
+	}
+
+	TCDEBUGCLOSE();
+	return done;
+}
+
+BOOL CClient::CloseStream()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CClient::CloseStream\n");
+	
+	BOOL done = TRUE;
+
+	if (m_InputStream)
+	{
+		delete m_InputStream;
+		m_InputStream = NULL;
+	}
+
+	TCDEBUGCLOSE();
+	return done;
+}
+BOOL CClient::OpenMessageFile(DestinationOptions *messageFileOptions)
+{
+	BOOL done = TRUE;
+	if (m_MessageFile == NULL)
+	{
+		m_MessageFile = new CMessageFile(messageFileOptions->destinationFile, m_ClientId);
+		m_MessageFile->Open();
+	}
+
+	return done;
+}
+BOOL CClient::CloseMessageFile()
+{
+	BOOL done = TRUE;
+
+	if (m_MessageFile)
+	{
+		delete m_MessageFile;
+		m_MessageFile = NULL;
+	}
+
+	return done;
+}
+BOOL CClient::ClearMessageFile()
+{
+	BOOL done = TRUE;
+
+	if (m_MessageFile)
+	{
+		m_MessageFile->ClearFile();
+	}
+
+	return done;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/Client.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// Client.h: interface for the CClient class.
+//
+// one of these per client
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_CLIENT_H__6BC8ADEC_683A_4924_ABD0_28B449E927C6__INCLUDED_)
+#define AFX_CLIENT_H__6BC8ADEC_683A_4924_ABD0_28B449E927C6__INCLUDED_
+
+#include "ServerClient.h"
+#include "InputStream.h"
+#include "MessageFile.h"
+#include "ErrorMonitorData.h"
+#include "TCConstants.h"
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+class CConnection;
+
+class CClient  
+{
+public:
+	CClient();
+	CClient(CConnection* connection, ClientOptions& options, DWORD clientId);
+	virtual ~CClient();
+
+	void Start() { m_Status = eStarted; }
+	void Stop() { m_Status = eStopped; }
+
+	BOOL IsStarted() { return (m_Status == eStarted); }
+	DWORD GetClientId() { return m_ClientId; }
+	CConnection* GetConnection() { return m_Connection; }
+	BOOL OpenStream(DestinationOptions* streamOptions);
+	BOOL CloseStream();
+	BOOL IsStreamOpen() { return (m_InputStream != NULL); }
+	CInputStream* GetInputStream() { return m_InputStream; }
+
+	BOOL OpenMessageFile(DestinationOptions* messageFileOptions);
+	BOOL CloseMessageFile();
+	BOOL ClearMessageFile();
+	BOOL IsMessageFileOpen() { return (m_MessageFile != NULL); }
+	CMessageFile* GetMessageFile() { return m_MessageFile; }
+
+	eMessageDestination m_MessageDestination;
+	CMessageFile* m_MessageFile;
+	CInputStream* m_InputStream;
+	CErrorMonitor* m_ErrorMonitor;
+	CConnection* m_Connection;
+	ClientOptions m_Options;
+	eClientStatus m_Status;
+	DWORD m_ClientId;
+};
+
+#endif // !defined(AFX_CLIENT_H__6BC8ADEC_683A_4924_ABD0_28B449E927C6__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/CommRegistryItem.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// CommRegistryItem.cpp: implementation of the CCommRegistryItem class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "CommRegistryItem.h"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CCommRegistryItem::CCommRegistryItem()
+{
+
+}
+
+CCommRegistryItem::~CCommRegistryItem()
+{
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/CommRegistryItem.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// CommRegistryItem.h: interface for the CCommRegistryItem class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_COMMREGISTRYITEM_H__3100D179_F754_4A4C_910D_7EB827E8DEA0__INCLUDED_)
+#define AFX_COMMREGISTRYITEM_H__3100D179_F754_4A4C_910D_7EB827E8DEA0__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "ServerClient.h"
+#include "BaseCom.h"
+
+#define MAX_DLLPATHNAME (2048)
+
+class CCommRegistryItem  
+{
+public:
+	CCommRegistryItem();
+	virtual ~CCommRegistryItem();
+
+	char m_CommType[MAX_CONNECTION_TYPE];
+	char m_CommLibrary[MAX_DLLPATHNAME];
+};
+
+#endif // !defined(AFX_COMMREGISTRYITEM_H__3100D179_F754_4A4C_910D_7EB827E8DEA0__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/Connection.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// Connection.cpp: implementation of the CConnection class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "Connection.h"
+#include "ServerManager.h"
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#define TCDEBUGOPEN() if (gDoLogging) { this->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(this->m_DebugLogMsg,"%s", s); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1, a2); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1, a2, a3); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { this->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+CConnection::CConnection()
+{
+}
+
+CConnection::CConnection(ConnectData conData, DWORD connectionId)
+{
+}
+
+CConnection::~CConnection()
+{
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/Connection.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// Connection.h: interface for the CConnection class.
+// Implemented by CConnectionImpl
+//
+// one of these per connection
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_CONNECTION_H__C7E97807_97B0_4BF7_AEC7_FA246A751509__INCLUDED_)
+#define AFX_CONNECTION_H__C7E97807_97B0_4BF7_AEC7_FA246A751509__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "ServerClient.h"
+#include "TCErrorConstants.h"
+#include "Client.h"
+#include "Registry.h"
+#include "BaseCom.h"
+#include <vector>
+#include <time.h>
+
+// basename is suffixed with connection ID to make it unique per CConnection
+#define MESSAGEPROCESSOR_EXITEVENT_BASENAME	"TCFServerMessageProcessorExittedEvent"
+#define MESSAGEPROCESSOR_STOPEVENT_BASENAME	"TCFServerMessageProcessorStoppedEvent"
+#define MESSAGEPROCESSOR_STARTEVENT_BASENAME	"TCFServerMessageProcessorStartedEvent"
+#define MESSAGEPROCESSOR_EVENTWAIT_TIMEOUT	60000L
+
+typedef std::vector<CClient*> ClientList;
+
+// m_MessageProcessorState states
+#define MP_NONE (0)
+#define MP_EXIT (1)
+#define MP_START (2)
+#define MP_PAUSE (3)
+#define MP_PROCESSING (4)
+
+
+#define FLUSH_TIME		(100)		// 100 ms
+class CConnection  
+{
+public:
+	CConnection();
+	CConnection(ConnectData conData, DWORD connectionId);
+	virtual ~CConnection();
+
+	virtual BOOL IsEqual(CConnection* connection)=0;
+	virtual BOOL IsEqual(pConnectData pConData)=0;
+	virtual long GetConnectionId() { return m_ConnectionID; }
+	virtual BOOL ExitProcessing()=0;				// exit processing thread
+	virtual long DoDisconnect()=0;
+	virtual void NotifyClientsCommError(long tcfError, bool passOsError=false, DWORD osError=0)=0;
+	long m_ConnectionID;			// id for this connection
+
+	ConnectData* m_ConnectSettings;	// connection settings
+};
+
+#endif // !defined(AFX_CONNECTION_H__C7E97807_97B0_4BF7_AEC7_FA246A751509__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ConnectionImpl.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,907 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// ConnectionImpl.cpp: implementation of the CConnectionImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "ConnectionImpl.h"
+#include "RegistryImpl.h"
+#include "ServerManager.h"
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+#define LOG_CONNECTION
+#if defined(LOG_CONNECTION) && defined(_DEBUG)
+#define TCDEBUGOPEN() if (gDoLogging) { this->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(this->m_DebugLogMsg,"%s", s); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1, a2); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1, a2, a3); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGLOGA4(s, a1, a2, a3, a4) if (gDoLogging) { sprintf(this->m_DebugLogMsg, s, a1, a2, a3, a4); this->m_DebugLog->log(this->m_DebugLogMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { this->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGLOGA4(s, a1, a2, a3, a4)
+#define TCDEBUGCLOSE()
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CConnectionImpl::CConnectionImpl()
+{
+	m_ConnectSettings = NULL;
+	m_ClientList = NULL;
+	m_Status = eDisconnected;
+	m_Registry = NULL;
+	m_ConnectionID = 0;
+	m_OsError = 0;
+	m_BaseComm = NULL;
+	m_BaseProtocol = NULL;
+	m_BaseCommHandle = NULL;
+	m_BaseProtocolHandle = NULL;
+
+	// message processing thread flags and handles
+	m_MessageProcessorState = MP_NONE;
+	m_ExitMessageProcessor = false;
+	m_PauseMessageProcessing = false;
+	m_StartMessageProcessing = false;
+	m_hMessageProcessorExittedEvent = NULL;
+	m_hMessageProcessorStoppedEvent = NULL;
+	m_hMessageProcessorStartedEvent = NULL;
+	m_hMessageProcessorThread = NULL;
+	m_dwMessageProcessorThreadId = 0;
+
+	m_NextRetryTime = m_RetryTimeoutTime = 0;
+
+	m_NextFlushFileTime = 0;
+}
+
+CConnectionImpl::CConnectionImpl(ConnectData conData, DWORD connectionId)
+{
+#ifdef _DEBUG
+	if (gDoLogging)
+	{
+		m_DebugLog = new TCDebugLog("TCF_ConnectionLog", connectionId);
+		m_DebugLog2 = new TCDebugLog("TCF_ProcessorLog", connectionId);
+	}
+	else
+	{
+		m_DebugLog = NULL;
+		m_DebugLog2 = NULL;
+	}
+#else
+	m_DebugLog = NULL;
+	m_DebugLog2 = NULL;
+#endif
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGA1("CConnectionImpl::CConnectionImpl id = %d\n", connectionId);
+
+	m_ConnectSettings = new ConnectData();
+
+	memcpy(m_ConnectSettings, &conData, sizeof(ConnectData));
+
+	m_ClientList = new ClientList();
+	m_ClientList->clear();
+	m_Status = eDisconnected;
+	m_Registry = new CRegistryImpl(connectionId);
+	m_ConnectionID = connectionId;
+	m_BaseComm = NULL;
+	m_BaseProtocol = NULL;
+	m_BaseCommHandle = NULL;
+	m_BaseProtocolHandle = NULL;
+
+	// message processing thread flags and handles
+	m_MessageProcessorState = MP_NONE;
+	m_ExitMessageProcessor = false;
+	m_PauseMessageProcessing = false;
+	m_StartMessageProcessing = false;
+
+	// create named events
+	char eventName[100];
+
+	sprintf(eventName, "%s%d", MESSAGEPROCESSOR_EXITEVENT_BASENAME, connectionId);
+	m_hMessageProcessorExittedEvent = ::CreateEvent(NULL, FALSE, FALSE, eventName);
+
+	sprintf(eventName, "%s%d", MESSAGEPROCESSOR_STOPEVENT_BASENAME, connectionId);
+	m_hMessageProcessorStoppedEvent = ::CreateEvent(NULL, FALSE, FALSE, eventName);
+
+	sprintf(eventName, "%s%d", MESSAGEPROCESSOR_STARTEVENT_BASENAME, connectionId);
+	m_hMessageProcessorStartedEvent = ::CreateEvent(NULL, FALSE, FALSE, eventName);
+
+	m_hMessageProcessorThread = NULL;
+	m_dwMessageProcessorThreadId = 0;
+
+	m_NextRetryTime = m_RetryTimeoutTime = 0;
+
+	m_NextFlushFileTime = 0;
+	m_OsError = 0;
+
+	TCDEBUGCLOSE();
+}
+CConnectionImpl::~CConnectionImpl()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CConnectionImpl::~CConnectionImpl\n");
+
+	// terminate the message processor thread if running
+
+	if (m_hMessageProcessorThread != NULL)
+	{
+		BOOL t = ::TerminateThread(m_hMessageProcessorThread, 0);
+		::CloseHandle(m_hMessageProcessorThread);
+	}
+
+	if (m_hMessageProcessorExittedEvent != NULL)
+	{
+		::CloseHandle(m_hMessageProcessorExittedEvent);
+	}
+
+	if (m_hMessageProcessorStoppedEvent != NULL)
+	{
+		::CloseHandle(m_hMessageProcessorStoppedEvent);
+	}
+
+	if (m_ConnectSettings)
+		delete m_ConnectSettings;
+
+
+	if (m_ClientList)
+	{
+		m_ClientList->clear();
+		delete m_ClientList;
+	}
+
+	if (m_Registry)
+	{
+		delete m_Registry;
+	}
+
+	if (m_BaseComm)
+	{
+		delete m_BaseComm;
+	}
+
+	if (m_BaseCommHandle)
+	{
+		::FreeLibrary(m_BaseCommHandle);
+	}
+	if (m_BaseProtocol)
+	{
+		delete m_BaseProtocol;
+	}
+
+	if (m_BaseProtocolHandle)
+	{
+		::FreeLibrary(m_BaseProtocolHandle);
+	}
+
+	TCDEBUGCLOSE();
+	if (m_DebugLog)
+		delete m_DebugLog;
+	if (m_DebugLog2)
+		delete m_DebugLog2;
+
+}
+
+BOOL CConnectionImpl::IsEqual(CConnection* connection)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CConnectionImpl::IsEqual\n");
+
+	BOOL equal = FALSE;
+
+	if (strcmp(m_ConnectSettings->connectType, connection->m_ConnectSettings->connectType) == 0)
+	{
+		if (m_BaseComm)
+		{
+			if (m_BaseComm->IsConnectionEqual(connection->m_ConnectSettings))
+			{
+				equal = TRUE;
+			}
+		}
+		else
+		{
+			equal = TRUE;
+		}
+	}
+
+	TCDEBUGCLOSE();
+	return equal;
+}
+
+BOOL CConnectionImpl::IsEqual(pConnectData pConData)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CConnectionImpl::IsEqual\n");
+
+	BOOL equal = FALSE;
+
+	if (strcmp(m_ConnectSettings->connectType, pConData->connectType) == 0)
+	{
+		if (m_BaseComm)
+		{
+			if (m_BaseComm->IsConnectionEqual(pConData))
+			{
+				equal = TRUE;
+			}
+		}
+		else
+		{
+			equal = TRUE;
+		}
+	}
+	TCDEBUGCLOSE();
+	return equal;
+}
+
+long CConnectionImpl::DoConnect()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CConnectionImpl::DoConnect\n");
+
+	long ret = TCAPI_ERR_NONE;
+
+	if (m_BaseComm && m_BaseProtocol)
+	{
+		ret = m_BaseComm->OpenPort();
+		if (ret != TCAPI_ERR_NONE)
+		{
+			m_OsError = m_BaseComm->m_lastCommError;
+			TCDEBUGLOGA1(" m_BaseComm->OpenPort = %d\n", ret);
+		}
+	}
+	else
+	{
+		ret = TCAPI_ERR_UNKNOWN_MEDIA_TYPE;
+	}
+
+	if (ret == TCAPI_ERR_NONE)
+	{
+		m_Status = eConnected;
+
+		TCDEBUGCLOSE();
+
+		StartProcessing();
+	}
+	else
+	{
+//		if (m_BaseComm != NULL)
+//		{
+//			delete m_BaseComm;
+//			m_BaseComm = NULL;
+//		}
+		TCDEBUGCLOSE();
+	}
+	return ret;
+}
+
+long CConnectionImpl::DoDisconnect()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CConnectionImpl::DoDisconnect\n");
+
+	long ret = TCAPI_ERR_NONE;
+	if (IsConnected())
+	{
+		ret = m_BaseComm->ClosePort();
+//		delete m_BaseComm;
+//		m_BaseComm = NULL;
+	}
+	m_Status = eDisconnected;
+
+	TCDEBUGCLOSE();
+	return ret;
+}
+
+BOOL CConnectionImpl::AddClient(CClient* client)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CConnectionImpl::AddClient\n");
+
+	BOOL ok = TRUE;
+
+	m_ClientList->push_back(client);
+
+	TCDEBUGCLOSE();
+	return ok;
+}
+
+long CConnectionImpl::DoSendMessage(long encodeOption, BYTE protocolVersion, BOOL useMsgId, BYTE msgId, DWORD msgLength, BYTE* pMsg)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CConnectionImpl::DoSendMessage\n");
+
+	long err = TCAPI_ERR_NONE;
+	if (IsRetryInProgress())
+	{
+		err = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
+	}
+	else if (IsRetryTimedOut())
+	{
+		err = TCAPI_ERR_COMM_TIMEOUT;
+	}
+	else if (m_Status == eConnected)
+	{
+		BYTE* encodedMessage = new BYTE[msgLength + 40]; // add enough for header (msgLength may be 0)
+		// if msgLength == 0, then encodeOption SHOULD be ENCODE_FORMAT since com expects to send something!
+		if (encodeOption == ENCODE_FORMAT)
+		{
+#ifdef _DEBUG
+			char msg[200]; msg[0] = '\0';
+			int len = (msgLength > 30) ? 30 : msgLength;
+			for (int i = 0; i < len; i ++)
+			{
+				sprintf(msg, "%s%02.2x ", msg, pMsg[i]);
+			}
+			sprintf(msg, "%s\n", msg);
+			TCDEBUGLOGS(msg);
+#endif
+			// msgLength maybe 0 and pMsg maybe NULL (we're not sending a raw message, just a protocol header)
+			msgLength = m_BaseProtocol->EncodeMessage(pMsg, msgLength, protocolVersion, msgId, encodedMessage, msgLength+40);
+#ifdef _DEBUG
+			msg[0] = '\0';
+			len = (msgLength > 30) ? 30 : msgLength;
+			for (i = 0; i < len; i ++)
+			{
+				sprintf(msg, "%s%02.2x ", msg, encodedMessage[i]);
+			}
+			sprintf(msg, "%s\n", msg);
+			TCDEBUGLOGS(msg);
+#endif
+			err = m_BaseComm->SendDataToPort(msgLength, encodedMessage);
+		}
+		else
+		{
+#ifdef _DEBUG
+			char msg[200]; msg[0] = '\0';
+			int len = (msgLength > 30) ? 30 : msgLength;
+			for (int i = 0; i < len; i ++)
+			{
+				sprintf(msg, "%s%02.2x ", msg, pMsg[i]);
+			}
+			sprintf(msg, "%s\n", msg);
+			TCDEBUGLOGS(msg);
+#endif
+			// msgLength != 0 and pMsg != NULL
+			err = m_BaseComm->SendDataToPort(msgLength, pMsg);
+		}
+		delete[] encodedMessage;
+
+		TCDEBUGLOGS("CConnectionImpl::DoSendMessage done\n");
+		if (err == TCAPI_ERR_COMM_ERROR)
+		{
+			EnterRetryPeriod(err, true, m_BaseComm->m_lastCommError);
+			m_OsError = m_BaseComm->m_lastCommError;
+		}
+	}
+	else
+	{
+		err = TCAPI_ERR_MEDIA_NOT_OPEN;
+	}
+
+	TCDEBUGLOGA1("CConnectionImpl::DoSendMessage err = %d\n", err);
+	TCDEBUGCLOSE();
+	return err;
+}
+
+long CConnectionImpl::DoRetryProcessing()
+{
+	long err = TCAPI_ERR_NONE;
+
+	// if not connected
+	//   return no error
+	if (m_BaseComm == NULL /*|| m_BaseComm->IsConnected() == false*/)
+		return TCAPI_ERR_MEDIA_NOT_OPEN;
+
+	// if retry not in progress && retry not timed out
+	//   return no error
+	if (!IsRetryInProgress() && !IsRetryTimedOut())
+		return TCAPI_ERR_NONE;
+
+//	TCDEBUGOPEN();
+//	TCDEBUGLOGS("CConnectionImpl::DoRetryProcessing\n");
+//	TCDEBUGCLOSE();
+	// if retry timeout flag already set
+	//   return timeout error
+	if (IsRetryTimedOut())
+		return TCAPI_ERR_COMM_TIMEOUT;
+
+	// get current time
+	time_t ctime;
+	time(&ctime);
+	// if retry timeout period has expired
+	if (ctime >= m_RetryTimeoutTime)
+	{
+		TCDEBUGOPEN();
+		TCDEBUGLOGS("CConnectionImpl::DoRetryProcessing retry timeout\n");
+		TCDEBUGCLOSE();
+		// send timeout error to all clients
+		NotifyClientsCommError(TCAPI_ERR_COMM_TIMEOUT);
+		// close comm port
+		m_BaseComm->ClosePort();
+		// set retry timeout flag
+		SetRetryTimedOut();
+		// return retry timeout error
+		err = TCAPI_ERR_COMM_TIMEOUT;
+	}
+	// else if retry time has passed
+	else if (ctime >= m_NextRetryTime)
+	{
+		TCDEBUGOPEN();
+		TCDEBUGLOGS("CConnectionImpl::DoRetryProcessing retry time\n");
+		TCDEBUGCLOSE();
+		// close comm port
+		// reopen comm port
+		m_BaseComm->ClosePort();
+		int openErr = m_BaseComm->OpenPort();
+		// if comm error
+		if (openErr != TCAPI_ERR_NONE)
+		{
+			// set next retry time
+			// return comm error
+			m_NextRetryTime = ctime + m_ConnectSettings->retryInterval;
+			err = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
+			m_OsError = m_BaseComm->m_lastCommError;
+		}
+		else
+		{
+		TCDEBUGOPEN();
+		TCDEBUGLOGS("CConnectionImpl::DoRetryProcessing reconnected\n");
+		TCDEBUGCLOSE();
+			// send reconnect warning to all clients
+			NotifyClientsCommError(TCAPI_INFO_COMM_RECONNECTED);
+			// set connected
+			SetConnected();
+			err = TCAPI_ERR_NONE;
+		}
+	} 
+	else // still in retry
+	{
+		err = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
+	}
+
+
+//	TCDEBUGOPEN();
+//	TCDEBUGLOGA1("CConnectionImpl::DoRetryProcessing err = %d\n", err);
+//	TCDEBUGCLOSE();
+	return err;
+}
+long CConnectionImpl::EnterRetryPeriod(long commErr, bool passOsErr, DWORD osErr)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CConnectionImpl::EnterRetryPeriod\n");
+	TCDEBUGCLOSE();
+
+	long err = TCAPI_ERR_NONE;
+
+	// set next retry time
+	time_t ctime;
+	time(&ctime);
+	m_NextRetryTime = ctime + m_ConnectSettings->retryInterval;
+	// set retry timeout time
+	m_RetryTimeoutTime = ctime + m_ConnectSettings->retryTimeout;
+	// send comm error to all clients
+	NotifyClientsCommError(commErr, passOsErr, osErr);
+	// set retry in progress flag
+	SetRetryInProgress();
+
+	return err;
+}
+
+BOOL CConnectionImpl::RemoveClient(CClient* client)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CConnectionImpl::RemoveClient\n");
+
+	BOOL found = FALSE;
+
+	if (m_ClientList->size() != 0)
+	{
+		ClientList::iterator iter;
+		for (iter = m_ClientList->begin(); iter != m_ClientList->end(); iter++)
+		{
+			if ((*iter)->GetClientId() == client->GetClientId())
+			{
+				m_ClientList->erase(iter);
+				found = TRUE;
+				break;
+			}
+		}
+	}
+
+	TCDEBUGCLOSE();
+	return found;
+}
+
+BOOL CConnectionImpl::ExitProcessing()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CConnectionImpl::ExitProcessing\n");
+
+	// exit the messageprocessing thread
+	if (m_hMessageProcessorThread != NULL)
+	{
+		m_MessageProcessorState = MP_EXIT;
+
+		m_StartMessageProcessing = false;
+		m_PauseMessageProcessing = true;
+		m_ExitMessageProcessor = true;
+		DWORD waitStatus = ::WaitForSingleObject(m_hMessageProcessorExittedEvent, MESSAGEPROCESSOR_EVENTWAIT_TIMEOUT);
+		TCDEBUGLOGA1("CConnectionImpl::ExitProcessing waitStatus=%x\n", waitStatus);
+		::CloseHandle(m_hMessageProcessorThread);
+		m_hMessageProcessorThread = NULL;
+	}
+	
+	TCDEBUGCLOSE();
+	return TRUE;
+}
+
+BOOL CConnectionImpl::StartProcessing()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CConnectionImpl::StartProcessing\n");
+
+	// starts processing thread
+	if (m_hMessageProcessorThread == NULL)
+	{
+		m_MessageProcessorState = MP_PAUSE;
+
+		m_ExitMessageProcessor = false;
+		m_StartMessageProcessing = false;
+		m_PauseMessageProcessing = false;
+		// TODO: create thread
+		m_hMessageProcessorThread = ::CreateThread(
+			NULL,
+			0,
+			(LPTHREAD_START_ROUTINE) MessageProcessor,
+			this,
+			0,
+			&m_dwMessageProcessorThreadId);
+	}
+
+	TCDEBUGCLOSE();
+	return PauseProcessing();//RestartProcessing();
+}
+
+BOOL CConnectionImpl::PauseProcessing()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CConnectionImpl::PauseProcessing\n");
+
+	// tells the processing thread to pause
+	if (m_hMessageProcessorThread != NULL)
+	{
+		m_MessageProcessorState = MP_PAUSE;
+
+		m_ExitMessageProcessor = false;
+		m_StartMessageProcessing = false;
+		m_PauseMessageProcessing = true;
+		DWORD waitStatus = ::WaitForSingleObject(m_hMessageProcessorStoppedEvent, MESSAGEPROCESSOR_EVENTWAIT_TIMEOUT);
+		TCDEBUGLOGA1("CConnectionImpl::PauseProcessing waitStatus=%x\n", waitStatus);
+	}
+	
+	TCDEBUGCLOSE();
+	return TRUE;
+}
+
+BOOL CConnectionImpl::RestartProcessing()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CConnectionImpl::RestartProcessing\n");
+
+	// tell the processing thread to restart
+	if (m_hMessageProcessorThread != NULL)
+	{
+		m_MessageProcessorState = MP_START;
+
+		m_ExitMessageProcessor = false;
+		m_StartMessageProcessing = true;
+		m_PauseMessageProcessing = false;
+		DWORD waitStatus = ::WaitForSingleObject(m_hMessageProcessorStartedEvent, MESSAGEPROCESSOR_EVENTWAIT_TIMEOUT);
+		TCDEBUGLOGA1("CConnectionImpl::RestartProcessing waitStatus=%x\n", waitStatus);
+	}
+	
+	TCDEBUGCLOSE();
+	return TRUE;
+}
+
+BOOL CConnectionImpl::RemoveClientFromRegistry(CClient* client)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CConnectionImpl::RemoveClientFromRegistry\n");
+	TCDEBUGCLOSE();
+
+	return m_Registry->RemoveClient(client);
+}
+
+BOOL CConnectionImpl::AddClientToRegistry(CClient* client, long numberIds, BYTE* ids)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CConnectionImpl::AddClientToRegistry\n");
+	TCDEBUGCLOSE();
+
+	return m_Registry->AddClient(client, numberIds, ids);
+}
+
+void CConnectionImpl::NotifyClientsCommError(long tcfError, bool passOsError, DWORD osError)
+{
+//	TCDEBUGOPEN();
+//	TCDEBUGLOGS("CConnectionImpl::NotifyClientsCommError\n");
+//	TCDEBUGCLOSE();
+
+	if (m_ClientList->size() != 0)
+	{
+		ClientList::iterator iter;
+		for (iter = m_ClientList->begin(); iter != m_ClientList->end(); iter++)
+		{
+			CErrorMonitor* errorMonitor = (*iter)->m_ErrorMonitor;
+			errorMonitor->PutError(tcfError, passOsError, osError);
+		}
+	}
+}
+BOOL CConnectionImpl::HasVersion()
+{
+	BOOL found = FALSE;
+
+	if (m_BaseComm && m_BaseComm->HasVersion())
+		found = TRUE;
+
+	return found;
+}
+void CConnectionImpl::GetVersion(char* version)
+{
+	if (HasVersion()) {
+		m_BaseComm->GetVersion(version);
+	}
+}
+
+void CConnectionImpl::UnLockAllDestinations()
+{
+	if (m_ClientList->size() != 0)
+	{
+		ClientList::iterator iter;
+		for (iter = m_ClientList->begin(); iter != m_ClientList->end(); iter++)
+		{
+			CInputStream* inputStream = (*iter)->m_InputStream;
+			CMessageFile* file = (*iter)->m_MessageFile;
+			if (inputStream != NULL) 
+			{
+				inputStream->UnLockStream();
+			}
+			else if (file != NULL)
+			{
+				file->UnLockMessageFile();
+			}
+		}
+	}
+}
+
+#define LOG_MPROCESSOR
+#if defined(LOG_MPROCESSOR) && defined(_DEBUG)
+#define MPLOGOPEN() if (gDoLogging) { pThis->m_DebugLog2->WaitForAccess(); }
+#define MPLOGS(s) if (gDoLogging) { sprintf(pThis->m_DebugLogMsg2,"%s", s); pThis->m_DebugLog2->log(pThis->m_DebugLogMsg2); }
+#define MPLOGA1(s, a1) if (gDoLogging) { sprintf(pThis->m_DebugLogMsg2, s, a1); pThis->m_DebugLog2->log(pThis->m_DebugLogMsg2); }
+#define MPLOGA2(s, a1, a2) if (gDoLogging) { sprintf(pThis->m_DebugLogMsg2, s, a1, a2); pThis->m_DebugLog2->log(pThis->m_DebugLogMsg2); }
+#define MPLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(pThis->m_DebugLogMsg2, s, a1, a2, a3); pThis->m_DebugLog2->log(pThis->m_DebugLogMsg2); }
+#define MPLOGCLOSE() if (gDoLogging) { pThis->m_DebugLog2->ReleaseAccess(); }
+#else
+#define MPLOGOPEN()
+#define MPLOGS(s)
+#define MPLOGA1(s, a1)
+#define MPLOGA2(s, a1, a2)
+#define MPLOGA3(s, a1, a2, a3)
+#define MPLOGCLOSE()
+#endif
+
+DWORD WINAPI CConnectionImpl::MessageProcessor(LPVOID lpParam)
+{
+	CConnectionImpl* pThis = (CConnectionImpl*)lpParam;
+
+	MPLOGOPEN();
+	MPLOGS("MessageProcessor start thread\n");
+
+	bool processing = false;
+	long err = TCAPI_ERR_NONE;
+	DWORD pollSize = 0;
+
+	while (pThis->m_MessageProcessorState != MP_EXIT)
+	{
+		if (pThis->m_MessageProcessorState == MP_PAUSE)
+		{
+			MPLOGS("MessageProcessor pause\n");
+
+			processing = false; 
+			pThis->m_PauseMessageProcessing = false;
+			pThis->m_MessageProcessorState = MP_NONE;
+			BOOL ok = ::SetEvent(pThis->m_hMessageProcessorStoppedEvent);
+		}
+
+		if (pThis->IsRetryInProgress())
+			err = pThis->DoRetryProcessing();
+		else if (pThis->IsRetryTimedOut())
+			err = TCAPI_ERR_COMM_TIMEOUT;
+
+		if (processing && err == TCAPI_ERR_NONE)
+		{
+			if (pThis->m_BaseComm && pThis->m_BaseComm->IsConnected())
+			{
+				err = pThis->m_BaseComm->PollPort(pollSize);
+				MPLOGA2("MessageProcessor PollPort = %d pollsize = %d\n", err, pollSize);
+				if (err != TCAPI_ERR_NONE)
+				{
+					MPLOGA2("MessageProcessor  err = %d osError = %d\n", err, pThis->m_BaseComm->m_lastCommError);
+					pThis->EnterRetryPeriod(err, true, pThis->m_BaseComm->m_lastCommError);
+				}
+				else
+				{
+					if (pollSize == 0)
+					{
+						Sleep(1);
+					}
+					else
+					{
+						long numberProcessed = 0;
+//						MPLOGA1("MessageProcessor ProcessBuffer pRegistry = %x\n", pThis->m_Registry);
+						err = pThis->m_BaseComm->ProcessBuffer(pThis, pThis->m_Registry, numberProcessed);
+
+						MPLOGA2("MessageProcessor ProcessBuffer err = %d number = %d\n", err, numberProcessed);
+
+						if (err == TCAPI_ERR_COMM_ERROR)
+						{
+							// for this error we have os error, but we probably caught this in PollPort already
+							pThis->EnterRetryPeriod(err, true, pThis->m_BaseComm->m_lastCommError);
+						}
+						else if (err != TCAPI_ERR_NONE)
+						{
+							// all clients already notified in ProcessBuffer
+							err = TCAPI_ERR_NONE;
+						}
+						pThis->UnLockAllDestinations(); // unlock all input streams, if they became locked during AddMessage()
+//						Sleep(1);
+					}
+				}
+//				MPLOGS("MessageProcessor FlushAllClientMessageFiles\n");
+				pThis->FlushAllClientMessageFiles();
+			}
+			else
+			{
+				// basecom not connected
+				Sleep(1);
+			}
+		}
+		else
+		{
+			// processing is not being done
+			Sleep(1);
+		}
+		if (pThis->m_MessageProcessorState == MP_START)
+		{
+			MPLOGS("MessageProcessor start\n");
+
+			processing = true;
+			pThis->m_StartMessageProcessing = false;
+			pThis->m_MessageProcessorState = MP_PROCESSING;
+			BOOL ok = ::SetEvent(pThis->m_hMessageProcessorStartedEvent);
+		}
+	}
+	// signal we're stopping
+	pThis->m_ExitMessageProcessor = false;
+	pThis->m_MessageProcessorState = MP_NONE;
+	::SetEvent(pThis->m_hMessageProcessorExittedEvent);
+
+	MPLOGS("MessageProcessor exit thread\n");
+	MPLOGCLOSE();
+
+	return 0;
+}
+
+void CConnectionImpl::FlushAllClientMessageFiles()
+{
+	DWORD cTick = GetTickCount();
+
+//	MPLOGA2("CConnectionImpl::FlushAllClientMessageFiles cTick=%d m_NextFlushFileTime=%d\n", cTick, m_NextFlushFileTime);
+
+	if (cTick > m_NextFlushFileTime)
+	{
+//	MPLOGS("CConnectionImpl::FlushAllClientMessageFiles flush timeout\n");
+		if (m_ClientList->size() != 0)
+		{
+			ClientList::iterator iter;
+			for (iter = m_ClientList->begin(); iter != m_ClientList->end(); iter++)
+			{
+				CMessageFile* file = (*iter)->m_MessageFile;
+				if (file != NULL)
+				{
+//	MPLOGS("CConnectionImpl::FlushAllClientMessageFiles flush client\n");
+					file->FlushFile();
+				}
+			}
+		}
+		m_NextFlushFileTime = GetTickCount() + FLUSH_TIME;		
+	}
+}
+
+BOOL CConnectionImpl::CreateCommProtocols(const char* commPath, const char* protPath)
+{
+	BOOL loaded = FALSE;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CConnectionImpl::CreateCommProtocols\n");
+
+	TCDEBUGLOGA2(" commPath=%s protPath=%s\n", commPath, protPath);
+
+	m_BaseCommHandle = ::LoadLibrary(commPath);
+	m_BaseProtocolHandle = ::LoadLibrary(protPath);
+	if (m_BaseCommHandle == NULL || m_BaseProtocolHandle == NULL)
+	{
+		TCDEBUGLOGA2(" error loading library, m_BaseCommHandle=%x m_BaseProtocolHandle=%x\n", m_BaseCommHandle, m_BaseProtocolHandle);
+		if (m_BaseCommHandle) ::FreeLibrary(m_BaseCommHandle); m_BaseCommHandle = NULL;
+		if (m_BaseProtocolHandle) ::FreeLibrary(m_BaseProtocolHandle); m_BaseProtocolHandle = NULL;
+
+	}
+	else
+	{
+		COMMCREATE lpCommFn = (COMMCREATE)::GetProcAddress(m_BaseCommHandle, COMMCREATE_FNNAME);
+		PROTOCOLCREATE lpProtFn = (PROTOCOLCREATE)::GetProcAddress(m_BaseProtocolHandle, PROTOCOLCREATE_FNNAME);
+		if (lpCommFn == NULL || lpProtFn == NULL)
+		{
+			TCDEBUGLOGA2(" error finding function, lpCommFn=%x lpProtFn=%x\n", lpCommFn, lpProtFn);
+			if (m_BaseCommHandle) ::FreeLibrary(m_BaseCommHandle); m_BaseCommHandle = NULL;
+			if (m_BaseProtocolHandle) ::FreeLibrary(m_BaseProtocolHandle); m_BaseProtocolHandle = NULL;
+		}
+		else
+		{
+			m_BaseProtocol = lpProtFn();
+			if (m_BaseProtocol == NULL)
+			{
+				TCDEBUGLOGA1(" error creating protocol, m_BaseProtocol=%x\n", m_BaseProtocol);
+				if (m_BaseCommHandle) ::FreeLibrary(m_BaseCommHandle); m_BaseCommHandle = NULL;
+				if (m_BaseProtocolHandle) ::FreeLibrary(m_BaseProtocolHandle); m_BaseProtocolHandle = NULL;
+			}
+			else
+			{
+				m_BaseComm = lpCommFn(m_ConnectSettings, m_ConnectionID, m_BaseProtocol);
+				if (m_BaseComm == NULL)
+				{
+					TCDEBUGLOGA1(" error creating comm, m_BaseComm=%x\n", m_BaseComm);
+					if (m_BaseProtocol) delete m_BaseProtocol; m_BaseProtocol = NULL;
+
+					if (m_BaseCommHandle) ::FreeLibrary(m_BaseCommHandle); m_BaseCommHandle = NULL;
+					if (m_BaseProtocolHandle) ::FreeLibrary(m_BaseProtocolHandle); m_BaseProtocolHandle = NULL;
+				}
+				else
+				{
+					loaded = TRUE;
+					TCDEBUGLOGA4(" created class, m_BaseComm=%x m_BaseProtocol=%x m_BaseCommHandle=%x m_BaseProtocolHandle=%x\n", m_BaseComm, m_BaseProtocol, m_BaseCommHandle, m_BaseProtocolHandle);
+				}
+			}
+		}
+	}
+
+	TCDEBUGCLOSE();
+	return loaded;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ConnectionImpl.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,123 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// ConnectionImpl.h: interface for the CConnectionImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_CONNECTIONIMPL_H__1D0D5B50_3DDD_49B8_834B_5996D9CC0124__INCLUDED_)
+#define AFX_CONNECTIONIMPL_H__1D0D5B50_3DDD_49B8_834B_5996D9CC0124__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "Connection.h"
+
+class CConnectionImpl : public CConnection  
+{
+public:
+	CConnectionImpl();
+	CConnectionImpl(ConnectData conData, DWORD connectionId);
+	virtual ~CConnectionImpl();
+
+	BOOL IsEqual(CConnection* connection);
+	BOOL IsEqual(pConnectData pConData);
+
+	BOOL AddClient(CClient* client);	// add a client to this connection
+	BOOL RemoveClient(CClient* client);	// remove a client from this connection
+	BOOL AddClientToRegistry(CClient* client, long numberIds, BYTE* ids); 
+	BOOL RemoveClientFromRegistry(CClient* client); // remove a client from this registry
+	BOOL StartClient(CClient* client){ return TRUE; }	// start processing for a specified client
+	BOOL StopClient(CClient* client){ return TRUE; }	// stop processing for a specified client
+	long DoConnect();
+	long DoDisconnect();
+	long DoSendMessage(long encodeOption, BYTE protocolVersion, BOOL useMsgId, BYTE msgId, DWORD msgLength, BYTE* msg);
+	long DoRetryProcessing();
+	long EnterRetryPeriod(long err, bool passOsErr, DWORD osErr);
+
+	BOOL PauseProcessing();				// pause processing thread (not exit)
+	BOOL RestartProcessing();			// restart processing after a pause
+	BOOL StartProcessing();				// start processing thread
+	BOOL ExitProcessing();				// exit processing thread
+	BOOL IsProcessingPaused() { return (m_MessageProcessorState == MP_PAUSE); }
+	BOOL IsProcessingStarted() { return (m_MessageProcessorState == MP_START); }
+	BOOL IsProcessingContinuing() { return (m_MessageProcessorState == MP_PROCESSING); }
+
+	long GetConnectionId() { return m_ConnectionID; }
+
+	// m_Status operations
+	BOOL IsConnected() { return ((m_Status == eConnected) || (m_Status == eRetryInProgress)); }
+	BOOL IsDisconnected() { return (m_Status == eDisconnected); }
+	BOOL IsRetryInProgress() { return (m_Status== eRetryInProgress); }
+	BOOL IsRetryTimedOut() { return (m_Status == eRetryTimedOut); }
+	void SetConnected() { m_Status = eConnected; }
+	void SetDisconnected() { m_Status = eDisconnected; }
+	void SetRetryInProgress() { m_Status = eRetryInProgress; }
+	void SetRetryTimedOut() { m_Status = eRetryTimedOut; }
+	void NotifyClientsCommError(long tcfError, bool passOsError=false, DWORD osError=0);
+	BOOL CreateCommProtocols(const char* commLibraryPath, const char* protocolLibraryPath);
+	BOOL HasVersion();
+	void GetVersion(char* outVersion);
+	
+	long GetNumberClients() { return m_ClientList->size(); }
+
+	void UnLockAllDestinations();
+	void FlushAllClientMessageFiles();
+
+	ConnectData* m_ConnectSettings;	// connection settings
+	ClientList* m_ClientList;		// this connection only
+	eConnectionStatus m_Status;		// this connection status
+	CRegistry* m_Registry;			// registry for this connection
+	long m_ConnectionID;			// id for this connection
+
+	CBaseCom* m_BaseComm;			// communication port handler
+	HINSTANCE m_BaseCommHandle;
+	CBaseProtocol* m_BaseProtocol;	// protocol for port
+	HINSTANCE m_BaseProtocolHandle;
+
+	unsigned long m_OsError;		// error from OS if applicable
+
+
+	char m_DebugLogMsg[2000];
+	TCDebugLog* m_DebugLog;
+	char m_DebugLogMsg2[2000];
+	TCDebugLog* m_DebugLog2;
+
+	// MessageProcessor thread
+	static DWORD WINAPI MessageProcessor(LPVOID lpParam);
+
+	int m_MessageProcessorState;
+	bool m_ExitMessageProcessor;		// flag to tell MessageProcessor thread to exit
+	bool m_PauseMessageProcessing; // flag to tell MessageProcessor thread to stop all message processing (temporarily)
+	bool m_StartMessageProcessing;	// flag to tell MessageProcessor thread to start message processing
+	HANDLE m_hMessageProcessorExittedEvent; // event to tell main thread that MessageProcessor thread has exitted
+	HANDLE m_hMessageProcessorStoppedEvent; // event to tell main thread that MessageProcessor thread has stopped processing
+	HANDLE m_hMessageProcessorStartedEvent; // event to tell main thread that MessageProcessor thread has started processing
+	
+	HANDLE m_hMessageProcessorThread;	// handle to MessageProcessor thread
+	DWORD m_dwMessageProcessorThreadId;	// ID for          "			"
+
+	// com errors and retry stuff
+	time_t m_NextRetryTime;
+	time_t m_RetryTimeoutTime;
+
+	// client flush times
+	DWORD m_NextFlushFileTime;
+
+};
+
+#endif // !defined(AFX_CONNECTIONIMPL_H__1D0D5B50_3DDD_49B8_834B_5996D9CC0124__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/MessageFile.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,276 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// MessageFile.cpp: implementation of the CMessageFile class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "ServerClient.h"
+#include "MessageFile.h"
+#include "ServerManager.h"
+#include "TCErrorConstants.h"
+#include <stdio.h>
+#include <sys/stat.h>
+
+//#define USE_TEXT_FILE
+#ifdef USE_TEXT_FILE
+#define WRITE_MODE		"w+t"
+#define APPEND_MODE		"a+t"
+#else
+#define WRITE_MODE		"w+b"
+#define APPEND_MODE		"a+b"
+#endif
+
+#define FLUSH_FREQ	2000	// # messages to write between flushing (if buffered)
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+//#define LOG_MESSAGEFILE
+#if defined(LOG_MESSAGEFILE) && defined(_DEBUG)
+extern CServerManager* gManager;
+#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { gManager->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CMessageFile::CMessageFile(CHAR* pFilePath, long inClientID)
+{
+	m_ClientID = inClientID;
+	m_FileLocked = FALSE;
+	strncpy(m_FilePath, pFilePath, MAX_FILEPATH);
+
+	char toString[30];
+	sprintf(toString, "%s%04.4d", MESSAGEFILE_MUTEX_BASENAME, m_ClientID);
+
+	m_Mutex.Open(toString, MESSAGEFILE_MUTEX_TIMEOUT);
+	m_hFile = NULL;
+	m_numWritten = 0;
+	m_numWrittenSinceLastFlush = 0;
+	m_Open = FALSE;
+
+#ifdef LOG_FILE_PERFORMANCE
+	perfFileName="c:\\tcf\\serverfileperf.txt";
+	fpLog = NULL;
+	numLogged=0;
+#endif
+	OPENFILEPERF();
+}
+
+CMessageFile::~CMessageFile()
+{
+	CLOSEFILEPERF();
+	Close();
+	m_Mutex.Close();
+
+}
+
+long CMessageFile::AddMessage(DWORD inLength, BYTE* inMessage)
+{
+	long err = TCAPI_ERR_NONE;
+
+	BOOL gotIt = WaitForAccess(); // will lock on first access only
+	size_t lenWritten = 0;
+
+#ifdef USE_TEXT_FILE
+	lenWritten = inLength;
+	int textStart = 20;
+	if (inMessage[9] == 0x5a) textStart = 64;
+	for (int i = 0; i < textStart; i++)
+		fprintf(m_hFile, "%02.2X ", inMessage[i]);
+
+	for (i = textStart; i < (int)inLength; i++)
+	{
+		if (isprint(inMessage[i]))
+			fprintf(m_hFile, "%c", inMessage[i]);
+		else
+			fprintf(m_hFile, "%02.2X ", inMessage[i]);
+	}
+	fprintf(m_hFile,"\n");
+#else
+	lenWritten = fwrite(inMessage, 1, inLength, m_hFile);
+#endif
+	if (lenWritten < inLength)
+	{
+		err = TCAPI_ERR_WRITING_FILE;
+	}
+	else
+	{
+		m_numWrittenSinceLastFlush++;
+		m_numWritten++;
+		if ((m_numWrittenSinceLastFlush % FLUSH_FREQ) == 0)
+		{
+			FlushFile(TRUE);
+		}
+	}
+	LOGFILEPERF("AddMessage\n");
+
+	// no ReleaseAccess this is done by Connection when all bytes processed in buffer and
+	//   calls all clients unlock method
+
+	return err;
+}
+
+long CMessageFile::Open()
+{
+	TCDEBUGOPEN();
+	long err = TCAPI_ERR_NONE;
+
+	TCDEBUGLOGS("CMessageFile::Open\n");
+	WaitForAccess();
+
+	if (m_hFile)
+		fclose(m_hFile);
+
+	m_hFile = _fsopen(m_FilePath, APPEND_MODE, _SH_DENYNO);
+
+	if (m_hFile == NULL)
+	{
+		err = TCAPI_ERR_FILE_DOES_NOT_EXIST;
+	}
+	else
+		m_Open = TRUE;
+
+
+	ReleaseAccess();
+
+	TCDEBUGCLOSE();
+	return err;
+}
+
+long CMessageFile::Close()
+{
+	TCDEBUGOPEN();
+	long err = TCAPI_ERR_NONE;
+
+	TCDEBUGLOGA1("CMessageFile::Close numWritten=%d\n", m_numWritten);
+	WaitForAccess();
+
+	if (m_hFile)
+	{
+		fclose(m_hFile);
+		m_hFile = NULL;
+	}
+
+	ReleaseAccess();
+
+	TCDEBUGCLOSE();
+	return err;
+}
+
+long CMessageFile::ClearFile()
+{
+	TCDEBUGOPEN();
+	long err = TCAPI_ERR_NONE;
+
+	TCDEBUGLOGA2("CMessageFile::ClearFile m_hFile=%x numWritten=%d\n", m_hFile, m_numWritten);
+	WaitForAccess();
+
+	if (m_hFile)
+	{
+		fclose(m_hFile);
+		m_hFile = NULL;
+		m_Open = FALSE;
+	}
+	m_numWritten = 0;
+	m_numWrittenSinceLastFlush = 0;
+
+	m_hFile = _fsopen(m_FilePath, WRITE_MODE, _SH_DENYNO);
+
+	if (m_hFile == NULL)
+	{
+		err = TCAPI_ERR_FILE_DOES_NOT_EXIST;
+	}
+	else
+		m_Open = TRUE;
+
+	LOGFILEPERF("ClearFile\n");
+
+	TCDEBUGLOGA1("CMessageFile::ClearFile m_hFile=%x\n", m_hFile);
+	ReleaseAccess();
+
+	TCDEBUGCLOSE();
+	return err;
+}
+void CMessageFile::FlushFile(BOOL numberTimeOut)
+{
+	if (m_hFile && m_numWrittenSinceLastFlush > 0)
+	{
+		fflush(m_hFile);
+		m_numWrittenSinceLastFlush = 0;
+		if (numberTimeOut)
+			LOGFILEPERF("FlushFile <number>\n");
+		else
+			LOGFILEPERF("FlushFile <time>\n");
+	}
+}
+#ifdef LOG_FILE_PERFORMANCE
+void CMessageFile::logPerf(char* msg)
+{
+	if (fpLog)
+	{
+		SYSTEMTIME sTime;
+		GetLocalTime(&sTime);
+		fprintf(fpLog, 
+			"%02.2d%02.2d-%02.2d:%02.2d:%02.2d.%03.3d: %s",
+			sTime.wDay, sTime.wMonth, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds,
+			msg);
+
+		numLogged++;
+		if ((numLogged % 1000) == 0)
+			fflush(fpLog);
+	}
+}
+void CMessageFile::openPerf()
+{
+	struct _stat buf;
+	char* dirname = "c:\\tcf";
+	int result = _stat(dirname, &buf);
+	if (result == 0) // exists
+	{
+		if (fpLog == NULL)
+			fpLog = _fsopen(perfFileName, "at", _SH_DENYNO);
+	}
+	else
+	{
+		fpLog = NULL;
+	}
+}
+void CMessageFile::closePerf()
+{
+	if (fpLog)
+	{
+		fflush(fpLog);
+		fclose(fpLog);
+	}
+	fpLog = NULL;
+}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/MessageFile.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// MessageFile.h: interface for the CMessageFile class.
+//
+// One per client
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_MESSAGEFILE_H__1049F760_2A8A_491F_A868_B063D52B18E8__INCLUDED_)
+#define AFX_MESSAGEFILE_H__1049F760_2A8A_491F_A868_B063D52B18E8__INCLUDED_
+
+#include <share.h>
+#include "stdio.h"
+#include "mutex.h"
+//#include "ServerClient.h"
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+
+//----------------------------------
+// Message File Mutex
+//----------------------------------
+// Mutex name is basename + clientID
+#define MESSAGEFILE_MUTEX_BASENAME		"TCFMessageFileMutex"
+#define MESSAGEFILE_MUTEX_TIMEOUT		(60000L)
+
+class CMessageFile  
+{
+public:
+	CMessageFile(CHAR* pFilePath, long inClientID);
+	virtual ~CMessageFile();
+
+
+	long Open();
+	long Close();
+	long AddMessage(DWORD inLength, BYTE* inMessage);
+	void UnLockMessageFile() { ReleaseAccess(); }
+
+	BOOL WaitForAccess() { if (m_FileLocked) return TRUE; else { m_FileLocked = TRUE; return m_Mutex.Wait();} };
+	BOOL ReleaseAccess() { if (m_FileLocked) { m_FileLocked = FALSE; return m_Mutex.Release();} else return TRUE; };
+	BOOL isOpen() { return m_Open; }
+	long ClearFile();
+	void FlushFile(BOOL numberTimeOut = FALSE);
+
+	long m_ClientID;
+	BOOL m_Open;
+	Mutex m_Mutex;
+	CHAR m_FilePath[MAX_FILEPATH];
+	BOOL m_FileLocked;
+	FILE* m_hFile;
+	DWORD m_numWritten;		// total number written
+	DWORD m_numWrittenSinceLastFlush;	// number written and not flushed yet
+
+	// logging performance
+// for performance - independent of debug logging
+//#define LOG_FILE_PERFORMANCE
+#ifdef LOG_FILE_PERFORMANCE
+	char* perfFileName;
+	FILE *fpLog;
+	int numLogged;
+	void logPerf(char* msg);
+	void openPerf();
+	void closePerf();
+#define OPENFILEPERF() openPerf()
+#define LOGFILEPERF(s) logPerf(s)
+#define CLOSEFILEPERF() closePerf()
+#else
+#define OPENFILEPERF()
+#define LOGFILEPERF(s)
+#define CLOSEFILEPERF()
+#endif
+
+
+
+};
+
+#endif // !defined(AFX_MESSAGEFILE_H__1049F760_2A8A_491F_A868_B063D52B18E8__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ProtocolRegisterItem.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,20 @@
+// ProtocolRegisterItem.cpp: implementation of the ProtocolRegisterItem class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "ProtocolRegisterItem.h"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+ProtocolRegisterItem::ProtocolRegisterItem()
+{
+
+}
+
+ProtocolRegisterItem::~ProtocolRegisterItem()
+{
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ProtocolRegisterItem.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,25 @@
+// ProtocolRegisterItem.h: interface for the ProtocolRegisterItem class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_PROTOCOLREGISTERITEM_H__50FA06CD_9D2E_4A84_BEA7_1E4FD5374D8C__INCLUDED_)
+#define AFX_PROTOCOLREGISTERITEM_H__50FA06CD_9D2E_4A84_BEA7_1E4FD5374D8C__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "ServerClient.h"
+#include "BaseProtocol.h"
+
+class ProtocolRegisterItem  
+{
+public:
+	ProtocolRegisterItem();
+	virtual ~ProtocolRegisterItem();
+
+	char m_ProtocolType[MAX_DECODE_FORMAT];
+	CBaseProtocol* m_Protocol;
+};
+
+#endif // !defined(AFX_PROTOCOLREGISTERITEM_H__50FA06CD_9D2E_4A84_BEA7_1E4FD5374D8C__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ProtocolRegistryItem.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// ProtocolRegistryItem.cpp: implementation of the CProtocolRegistryItem class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "ProtocolRegistryItem.h"
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CProtocolRegistryItem::CProtocolRegistryItem()
+{
+
+}
+
+CProtocolRegistryItem::~CProtocolRegistryItem()
+{
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ProtocolRegistryItem.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// ProtocolRegistryItem.h: interface for the CProtocolRegistryItem class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_PROTOCOLREGISTRYITEM_H__BD3F800B_7676_4D8D_907E_AE324467968C__INCLUDED_)
+#define AFX_PROTOCOLREGISTRYITEM_H__BD3F800B_7676_4D8D_907E_AE324467968C__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+#include "ServerClient.h"
+#include "BaseProtocol.h"
+//#include <vector>
+
+#define MAX_DLLPATHNAME (2048)
+
+class CProtocolRegistryItem  
+{
+public:
+	CProtocolRegistryItem();
+	virtual ~CProtocolRegistryItem();
+
+	char m_ProtocolType[MAX_DECODE_FORMAT];
+	char m_ProtocolLibrary[MAX_DLLPATHNAME];
+	
+};
+
+//typdef std::vector<CProtocolRegistryItem*> ProtocolRegistryList;
+
+
+#endif // !defined(AFX_PROTOCOLREGISTRYITEM_H__BD3F800B_7676_4D8D_907E_AE324467968C__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ReadMe.txt	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,34 @@
+========================================================================
+       CONSOLE APPLICATION : TCFServer
+========================================================================
+
+
+AppWizard has created this TCFServer application for you.  
+
+This file contains a summary of what you will find in each of the files that
+make up your TCFServer application.
+
+TCFServer.dsp
+    This file (the project file) contains information at the project level and
+    is used to build a single project or subproject. Other users can share the
+    project (.dsp) file, but they should export the makefiles locally.
+
+TCFServer.cpp
+    This is the main application source file.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other standard files:
+
+StdAfx.h, StdAfx.cpp
+    These files are used to build a precompiled header (PCH) file
+    named TCFServer.pch and a precompiled types file named StdAfx.obj.
+
+
+/////////////////////////////////////////////////////////////////////////////
+Other notes:
+
+AppWizard uses "TODO:" to indicate parts of the source code you
+should add to or customize.
+
+/////////////////////////////////////////////////////////////////////////////
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/Registry.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,264 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// Registry.cpp: implementation of the CRegistry class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "Registry.h"
+#include "ServerManager.h"
+
+//#define LOG_REGISTRY
+#if defined(LOG_REGISTRY) && defined(_DEBUG)
+extern BOOL gDoLogging;
+extern char TCDebugMsg[];
+extern CServerManager* gManager;
+#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { gManager->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+CRegistry::CRegistry()
+{
+}
+CRegistry::CRegistry(DWORD connectionId)
+{
+}
+CRegistry::~CRegistry()
+{
+}
+#if (0)
+CRegistry::CRegistry()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CRegistry::CRegistry\n");
+	TCDEBUGCLOSE();
+}
+
+CRegistry::CRegistry(DWORD connectionId)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA1("CRegistry::CRegistry connectionId = %d\n", connectionId);
+
+	for (int i = 0; i < MAX_MESSAGE_IDS; i++)
+	{
+		m_Registry[i].clist = new IdClientList();
+		m_Registry[i].clist->clear();
+	}
+
+	char mutexName[200];
+
+	sprintf(mutexName, "%s%d", REGISTRY_MUTEX_BASENAME, connectionId);
+	m_Mutex.Open(mutexName, REGISTRY_MUTEX_TIMEOUT);
+	TCDEBUGCLOSE();
+}
+
+CRegistry::~CRegistry()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CRegistry::~CRegistry\n");
+
+	for (int i = 0; i < MAX_MESSAGE_IDS; i++)
+	{
+		if (m_Registry[i].clist != NULL)
+		{
+			m_Registry[i].clist->clear();
+			delete m_Registry[i].clist;
+		}
+	}
+	m_Mutex.Close();
+	TCDEBUGCLOSE();
+}
+BOOL CRegistry::AddClient(CClient* newClient, long numberIds, BYTE* ids)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CRegistry::AddClient\n");
+
+	m_Mutex.Wait();
+
+	for (int i = 0; i < numberIds; i++)
+	{
+		TCDEBUGLOGA1(" id=%x\n", ids[i]);
+		m_Registry[ids[i]].clist->push_back(newClient);
+	}
+
+	DumpRegistry();
+	m_Mutex.Release();
+	TCDEBUGCLOSE();
+	return TRUE;
+}
+BOOL CRegistry::RemoveClient(CClient* client)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CRegistry::RemoveClient\n");
+
+	m_Mutex.Wait();
+
+	BOOL found = FALSE;
+
+	for (int i = 0; i < MAX_MESSAGE_IDS; i++)
+	{
+		long num = m_Registry[i].clist->size();
+		if (num != 0)
+		{
+			TCDEBUGLOGA3(" CRegistry::RemoveClient client = %x i = %x num = %d\n", client, i, num);
+			IdClientList::iterator iter;
+			for (iter = m_Registry[i].clist->begin(); iter != m_Registry[i].clist->end(); iter++)
+			{
+				TCDEBUGLOGA2(" CRegistry::RemoveClient iter = %x *iter = %x\n", iter, *iter);
+				if (client == *iter)
+				{
+					m_Registry[i].clist->erase(iter);
+					found = TRUE;
+					break;
+				}
+			}
+		}
+	}
+
+	m_Mutex.Release();
+	TCDEBUGCLOSE();
+	return found;
+}
+
+void CRegistry::DumpRegistry()
+{
+	for (int i = 0; i < MAX_MESSAGE_IDS; i++)
+	{
+		long num = m_Registry[i].clist->size();
+		if (num != 0)
+		{
+			TCDEBUGLOGA2(" CRegistry::DumpRegistry i = %x num = %d\n", i, num);
+			IdClientList::iterator iter;
+			for (iter = m_Registry[i].clist->begin(); iter != m_Registry[i].clist->end(); iter++)
+			{
+				TCDEBUGLOGA2(" CRegistry::DumpRegistry iter = %x *iter = %x\n", iter, *iter);
+			}
+		}
+	}
+}
+
+// fullmessage includes the protocol header
+// message is unwrapped from the protocol header
+// this is because some clients want the full message and some clients just want the actual message
+long CRegistry::RouteMessage(BYTE msgId, BYTE* fullMessage, DWORD fullLen, BYTE* realMessage, DWORD realMessageLen)
+{
+
+	long err = TCAPI_ERR_NONE;
+
+//	TCDEBUGOPEN();
+//	TCDEBUGLOGS("CRegistry::RouteMessage\n");
+//	TCDEBUGCLOSE();
+	m_Mutex.Wait();
+
+	if (msgId >= 0 && msgId < MAX_MESSAGE_IDS)
+	{
+		long numClients = m_Registry[msgId&0xff].clist->size();
+
+		TCDEBUGOPEN();
+		TCDEBUGLOGA2(" CRegistry::RouteMessage msgId = %x numClients = %d\n", msgId, numClients);
+		TCDEBUGCLOSE();
+
+		if (numClients > 0)
+		{
+			IdClientList::iterator iter;
+			for (iter = m_Registry[msgId&0xff].clist->begin(); iter != m_Registry[msgId&0xff].clist->end(); iter++)
+			{
+				CClient* client = *iter;
+				if (client && client->IsStarted())
+				{
+					if (client->IsStreamOpen())
+					{
+						CInputStream* stream = client->GetInputStream();
+						// get unwrap format
+						if (client->m_Options.unWrapFormat == UNWRAP_LEAVE_HEADERS)
+						{
+							// use full message
+							err = stream->AddMessage(fullLen, fullMessage);
+							// routing errors here can be input stream overflows
+							//  notify this client right now (no OS error)
+							if (err != TCAPI_ERR_NONE)
+							{
+								client->m_ErrorMonitor->PutError(err, false, 0);
+								err = TCAPI_ERR_NONE;
+							}
+						}
+						else
+						{
+							// use raw message
+							err = stream->AddMessage(realMessageLen, realMessage);
+							// routing errors here can be input stream overflows
+							//  notify this client right now (no OS error)
+							if (err != TCAPI_ERR_NONE)
+							{
+								client->m_ErrorMonitor->PutError(err, false, 0);
+								err = TCAPI_ERR_NONE;
+							}
+						}
+					}
+					else if (client->IsMessageFileOpen())
+					{
+						CMessageFile* file = client->GetMessageFile();
+						// get unwrap format
+						if (client->m_Options.unWrapFormat == UNWRAP_LEAVE_HEADERS)
+						{
+							// use full message
+							err = file->AddMessage(fullLen, fullMessage);
+							// routing errors here can be input stream overflows
+							//  notify this client right now (no OS error)
+							if (err != TCAPI_ERR_NONE)
+							{
+								client->m_ErrorMonitor->PutError(err, false, 0);
+								err = TCAPI_ERR_NONE;
+							}
+						}
+						else
+						{
+							// use raw message
+							err = file->AddMessage(realMessageLen, realMessage);
+							// routing errors here can be input stream overflows
+							//  notify this client right now (no OS error)
+							if (err != TCAPI_ERR_NONE)
+							{
+								client->m_ErrorMonitor->PutError(err, false, 0);
+								err = TCAPI_ERR_NONE;
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	m_Mutex.Release();
+	return err;
+}
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/Registry.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// Registry.h: interface for the CRegistry class.
+//
+// one of these per connection
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_REGISTRY_H__BB7103A0_5492_472D_86B4_C9BF4C25CD20__INCLUDED_)
+#define AFX_REGISTRY_H__BB7103A0_5492_472D_86B4_C9BF4C25CD20__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "Client.h"
+#include "mutex.h"
+#include <vector>
+
+#define REGISTRY_MUTEX_BASENAME		"TCFRegistry"
+#define REGISTRY_MUTEX_TIMEOUT		(60000L)
+
+typedef std::vector<CClient*> IdClientList;
+
+#define MAX_MESSAGE_IDS	(256)
+typedef struct tagMessageIdRegistry
+{
+	IdClientList* clist;
+} *pMessageIdRegistry, MessageIdRegistry;
+
+class CRegistry  
+{
+public:
+	CRegistry();
+	CRegistry(DWORD connectionId);
+	virtual ~CRegistry();
+
+	virtual BOOL AddClient(CClient* newClient, long numberIds, BYTE* ids)=0;
+	virtual BOOL RemoveClient(CClient* client)=0;
+	virtual void DumpRegistry()=0;
+	virtual long RouteMessage(BYTE msgId, BYTE* fullMessage, DWORD fullLen, BYTE* realMessage, DWORD realMessageLen)=0;
+
+	MessageIdRegistry m_Registry[MAX_MESSAGE_IDS];
+	Mutex m_Mutex;
+};
+
+#endif // !defined(AFX_REGISTRY_H__BB7103A0_5492_472D_86B4_C9BF4C25CD20__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/RegistryImpl.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,258 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// RegistryImpl.cpp: implementation of the CRegistryImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "RegistryImpl.h"
+#include "TCErrorConstants.h"
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+//#define LOG_REGISTRY
+#if defined(LOG_REGISTRY) && defined(_DEBUG)
+extern char TCDebugMsg[];
+extern CServerManager* gManager;
+#define TCDEBUGOPEN() if (gDoLogging) { gManager->m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { gManager->m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+
+CRegistryImpl::CRegistryImpl()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CRegistryImpl::CRegistryImpl\n");
+	TCDEBUGCLOSE();
+}
+
+CRegistryImpl::CRegistryImpl(DWORD connectionId)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGA1("CRegistryImpl::CRegistryImpl connectionId = %d\n", connectionId);
+
+	for (int i = 0; i < MAX_MESSAGE_IDS; i++)
+	{
+		m_Registry[i].clist = new IdClientList();
+		m_Registry[i].clist->clear();
+	}
+
+	char mutexName[200];
+
+	sprintf(mutexName, "%s%d", REGISTRY_MUTEX_BASENAME, connectionId);
+	m_Mutex.Open(mutexName, REGISTRY_MUTEX_TIMEOUT);
+	TCDEBUGCLOSE();
+}
+
+CRegistryImpl::~CRegistryImpl()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CRegistryImpl::~CRegistryImpl\n");
+
+	for (int i = 0; i < MAX_MESSAGE_IDS; i++)
+	{
+		if (m_Registry[i].clist != NULL)
+		{
+			m_Registry[i].clist->clear();
+			delete m_Registry[i].clist;
+		}
+	}
+	m_Mutex.Close();
+	TCDEBUGCLOSE();
+}
+
+BOOL CRegistryImpl::AddClient(CClient* newClient, long numberIds, BYTE* ids)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CRegistryImpl::AddClient\n");
+
+	m_Mutex.Wait();
+
+	for (int i = 0; i < numberIds; i++)
+	{
+		TCDEBUGLOGA1(" id=%x\n", ids[i]);
+		m_Registry[ids[i]].clist->push_back(newClient);
+	}
+
+	DumpRegistry();
+	m_Mutex.Release();
+	TCDEBUGCLOSE();
+	return TRUE;
+}
+BOOL CRegistryImpl::RemoveClient(CClient* client)
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CRegistryImpl::RemoveClient\n");
+
+	m_Mutex.Wait();
+
+	BOOL found = FALSE;
+
+	for (int i = 0; i < MAX_MESSAGE_IDS; i++)
+	{
+		long num = m_Registry[i].clist->size();
+		if (num != 0)
+		{
+			TCDEBUGLOGA3(" CRegistryImpl::RemoveClient client = %x i = %x num = %d\n", client, i, num);
+			IdClientList::iterator iter;
+			for (iter = m_Registry[i].clist->begin(); iter != m_Registry[i].clist->end(); iter++)
+			{
+				TCDEBUGLOGA2(" CRegistryImpl::RemoveClient iter = %x *iter = %x\n", iter, *iter);
+				if (client == *iter)
+				{
+					m_Registry[i].clist->erase(iter);
+					found = TRUE;
+					break;
+				}
+			}
+		}
+	}
+
+	m_Mutex.Release();
+	TCDEBUGCLOSE();
+	return found;
+}
+
+void CRegistryImpl::DumpRegistry()
+{
+	for (int i = 0; i < MAX_MESSAGE_IDS; i++)
+	{
+		long num = m_Registry[i].clist->size();
+		if (num != 0)
+		{
+			TCDEBUGLOGA2(" CRegistryImpl::DumpRegistry i = %x num = %d\n", i, num);
+			IdClientList::iterator iter;
+			for (iter = m_Registry[i].clist->begin(); iter != m_Registry[i].clist->end(); iter++)
+			{
+				TCDEBUGLOGA2(" CRegistryImpl::DumpRegistry iter = %x *iter = %x\n", iter, *iter);
+			}
+		}
+	}
+}
+
+// fullmessage includes the protocol header
+// message is unwrapped from the protocol header
+// this is because some clients want the full message and some clients just want the actual message
+long CRegistryImpl::RouteMessage(BYTE msgId, BYTE* fullMessage, DWORD fullLen, BYTE* realMessage, DWORD realMessageLen)
+{
+
+	long err = TCAPI_ERR_NONE;
+
+//	TCDEBUGOPEN();
+//	TCDEBUGLOGS("CRegistryImpl::RouteMessage\n");
+//	TCDEBUGCLOSE();
+	m_Mutex.Wait();
+
+	if (msgId >= 0 && msgId < MAX_MESSAGE_IDS)
+	{
+		long numClients = m_Registry[msgId&0xff].clist->size();
+
+		TCDEBUGOPEN();
+		TCDEBUGLOGA2(" CRegistryImpl::RouteMessage msgId = %x numClients = %d\n", msgId, numClients);
+		TCDEBUGCLOSE();
+
+		if (numClients > 0)
+		{
+			IdClientList::iterator iter;
+			for (iter = m_Registry[msgId&0xff].clist->begin(); iter != m_Registry[msgId&0xff].clist->end(); iter++)
+			{
+				CClient* client = *iter;
+				if (client && client->IsStarted())
+				{
+					if (client->IsStreamOpen())
+					{
+						CInputStream* stream = client->GetInputStream();
+						// get unwrap format
+						if (client->m_Options.unWrapFormat == UNWRAP_LEAVE_HEADERS)
+						{
+							// use full message
+							err = stream->AddMessage(fullLen, fullMessage);
+							// routing errors here can be input stream overflows
+							//  notify this client right now (no OS error)
+							if (err != TCAPI_ERR_NONE)
+							{
+								client->m_ErrorMonitor->PutError(err, false, 0);
+								err = TCAPI_ERR_NONE;
+							}
+						}
+						else
+						{
+							// use raw message
+							err = stream->AddMessage(realMessageLen, realMessage);
+							// routing errors here can be input stream overflows
+							//  notify this client right now (no OS error)
+							if (err != TCAPI_ERR_NONE)
+							{
+								client->m_ErrorMonitor->PutError(err, false, 0);
+								err = TCAPI_ERR_NONE;
+							}
+						}
+					}
+					else if (client->IsMessageFileOpen())
+					{
+						CMessageFile* file = client->GetMessageFile();
+						// get unwrap format
+						if (client->m_Options.unWrapFormat == UNWRAP_LEAVE_HEADERS)
+						{
+							// use full message
+							err = file->AddMessage(fullLen, fullMessage);
+							// routing errors here can be input stream overflows
+							//  notify this client right now (no OS error)
+							if (err != TCAPI_ERR_NONE)
+							{
+								client->m_ErrorMonitor->PutError(err, false, 0);
+								err = TCAPI_ERR_NONE;
+							}
+						}
+						else
+						{
+							// use raw message
+							err = file->AddMessage(realMessageLen, realMessage);
+							// routing errors here can be input stream overflows
+							//  notify this client right now (no OS error)
+							if (err != TCAPI_ERR_NONE)
+							{
+								client->m_ErrorMonitor->PutError(err, false, 0);
+								err = TCAPI_ERR_NONE;
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+
+	m_Mutex.Release();
+	return err;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/RegistryImpl.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// RegistryImpl.h: interface for the CRegistryImpl class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_REGISTRYIMPL_H__2C724EE6_DB27_4511_A934_EF3CDBBECADB__INCLUDED_)
+#define AFX_REGISTRYIMPL_H__2C724EE6_DB27_4511_A934_EF3CDBBECADB__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#include "Registry.h"
+
+class CRegistryImpl : public CRegistry  
+{
+public:
+	CRegistryImpl();
+	CRegistryImpl(DWORD connectionId);
+	virtual ~CRegistryImpl();
+
+	BOOL AddClient(CClient* newClient, long numberIds, BYTE* ids);
+	BOOL RemoveClient(CClient* client);
+	void DumpRegistry();
+	long RouteMessage(BYTE msgId, BYTE* fullMessage, DWORD fullLen, BYTE* realMessage, DWORD realMessageLen);
+
+};
+
+#endif // !defined(AFX_REGISTRYIMPL_H__2C724EE6_DB27_4511_A934_EF3CDBBECADB__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ServerManager.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,1192 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// ServerManager.cpp: implementation of the CServerManager class.
+//
+//////////////////////////////////////////////////////////////////////
+
+#include "stdafx.h"
+#include "ServerManager.h"
+#include "ConnectionImpl.h"
+#include "resource.h"
+
+
+#ifdef _DEBUG
+extern BOOL gDoLogging;
+#endif
+
+#define LOG_SERVERMANAGER
+#if defined(LOG_SERVERMANAGER) && defined(_DEBUG)
+extern char TCDebugMsg[];
+#define TCDEBUGOPEN() if (gDoLogging) { m_DebugLog->WaitForAccess(); }
+#define TCDEBUGLOGS(s) if (gDoLogging) { sprintf(TCDebugMsg,"%s", s); m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA1(s, a1) if (gDoLogging) { sprintf(TCDebugMsg, s, a1); m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA2(s, a1, a2) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2); m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGLOGA3(s, a1, a2, a3) if (gDoLogging) { sprintf(TCDebugMsg, s, a1, a2, a3); m_DebugLog->log(TCDebugMsg); }
+#define TCDEBUGCLOSE() if (gDoLogging) { m_DebugLog->ReleaseAccess(); }
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+
+extern char* gServerLocation;
+//////////////////////////////////////////////////////////////////////
+// Construction/Destruction
+//////////////////////////////////////////////////////////////////////
+CServerManager::CServerManager()
+{
+	m_DebugLog = NULL;
+	m_Server = NULL;
+	m_ConnectionList = NULL;
+	m_ClientList = NULL;
+	m_NextClientId = 0;
+	m_NextConnectionId = 0;
+	m_Version[0] = NULL;
+	m_ExeLocation = NULL;
+	m_ProtocolList = NULL;
+	m_CommList = NULL;
+
+}
+CServerManager::CServerManager(const char* exeLocation)
+{
+#ifdef _DEBUG
+	if (gDoLogging)
+		m_DebugLog = new TCDebugLog("TCF_ServerLog", ::GetCurrentProcessId());
+	else
+		m_DebugLog = NULL;
+#else
+	m_DebugLog = NULL;
+#endif
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CServerManager::CServerManager\n");
+
+	m_Server = new CServerCommand();
+
+	m_ConnectionList = new ConnectionList();
+	m_ConnectionList->clear();
+
+	m_ClientList = new ClientList();
+	m_ClientList->clear();
+
+	m_NextClientId = ::GetCurrentProcessId() * 100;
+	m_NextConnectionId = (::GetCurrentProcessId() * 100) + 100;
+
+	int ret = ::LoadString(::GetModuleHandle(NULL), IDS_VERSION, m_Version, MAX_VERSION_STRING);
+	TCDEBUGLOGA1(" version=%s\n", m_Version);
+
+	TCDEBUGLOGA1(" exeLocation=%s\n", exeLocation);
+	m_ExeLocation = new char[MAX_EXEPATHNAME];
+	m_ExeLocation[0] = '\0';
+	strcpy(m_ExeLocation, exeLocation);
+	TCDEBUGLOGA1(" m_ExeLocation=%s\n", m_ExeLocation);
+
+	m_ProtocolList = new ProtocolRegistry();
+	m_ProtocolList->clear();
+
+	m_CommList = new CommRegistry();
+	m_CommList->clear();
+
+	TCDEBUGCLOSE();
+}
+
+CServerManager::~CServerManager()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CServerManager::~CServerManager\n");
+
+	if (m_Server)
+		delete m_Server;
+
+	if (m_ConnectionList)
+	{
+		m_ConnectionList->clear();
+		delete m_ConnectionList;
+	}
+
+	if (m_ClientList)
+	{
+		m_ClientList->clear();
+		delete m_ClientList;
+	}
+
+	if (m_ExeLocation)
+		delete[] m_ExeLocation;
+
+	if (m_ProtocolList)
+	{
+		m_ProtocolList->clear();
+		delete m_ProtocolList;
+	}
+
+	if (m_CommList)
+	{
+		m_CommList->clear();
+		delete m_CommList;
+	}
+
+	TCDEBUGCLOSE();
+
+	if (m_DebugLog)
+		delete m_DebugLog;
+
+}
+void CServerManager::CommandThread()
+{
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CServerManager::CommandThread\n");
+	TCDEBUGCLOSE();
+	
+	bool done = false;
+	eServerCommand command = eCmdNone;
+	ServerCommandData cmdrsp; pServerCommandData pCmdrsp = &cmdrsp;
+	pServerMessageData pMsg = new ServerMessageData();
+
+	TCDEBUGOPEN();
+	RegisterAllProtocols();
+	RegisterAllComms();
+	TCDEBUGCLOSE();
+
+	while(!done)
+	{
+		while(!m_Server->GetCommand(pCmdrsp, pMsg))
+		{
+			Sleep(1);
+		}
+		command = pCmdrsp->command;
+
+		switch(command)
+		{
+		case eCmdConnect:
+			{
+	TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdConnect\n");
+	TCDEBUGCLOSE();
+
+				long ret = TCAPI_ERR_NONE;
+				BOOL connCreated = FALSE;
+				CConnectionImpl* conn = (CConnectionImpl*)FindConnection(&pCmdrsp->connectSettings);
+				if (conn == NULL)
+				{
+					// create new one
+					DWORD connId = m_NextConnectionId;
+					conn = new CConnectionImpl(pCmdrsp->connectSettings, connId);
+
+					TCDEBUGOPEN();
+					const char* commPath = FindCommPath(pCmdrsp->connectSettings.connectType);
+					TCDEBUGCLOSE();
+					TCDEBUGOPEN();
+					const char* protPath = FindProtocolPath(pCmdrsp->connectSettings.decodeFormat);
+					TCDEBUGCLOSE();
+
+					if (protPath == NULL || commPath == NULL)
+					{
+						ret = TCAPI_ERR_UNKNOWN_MEDIA_TYPE;
+					}
+					else
+					{
+						if (conn->CreateCommProtocols(commPath, protPath))
+						{
+							connCreated = TRUE;
+						}
+						else
+						{
+							ret = TCAPI_ERR_UNKNOWN_MEDIA_TYPE;
+						}
+					}
+				}
+				if (ret == TCAPI_ERR_NONE && (conn->IsDisconnected() || conn->IsRetryTimedOut()))
+				{
+					ret = conn->DoConnect();
+				}
+				if (ret == TCAPI_ERR_NONE)
+				{
+					DWORD id = m_NextClientId++;
+					// create client
+					CClient* client = new CClient(conn, pCmdrsp->clientOptions, id);
+					// add client to connection's list
+					conn->AddClient(client);
+					// add client to total list
+					m_ClientList->push_back(client);
+					// add connection to connection list
+					if (connCreated)
+						m_ConnectionList->push_back(conn);
+
+					m_NextConnectionId++;
+					pCmdrsp->response = eRspOK;
+					pCmdrsp->clientId = id;
+					m_Server->SendResponse(pCmdrsp);
+				}
+				else
+				{
+					if (conn->m_OsError > 0)
+						pCmdrsp->osError = conn->m_OsError;
+					else
+						pCmdrsp->osError = 0;
+					if (connCreated)
+						delete conn;
+					pCmdrsp->response = eRspError;
+					pCmdrsp->error = ret;
+					m_Server->SendResponse(pCmdrsp);
+				}
+			}
+			break;
+		case eCmdDisconnect:
+			{
+	TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdDisconnect\n");
+	TCDEBUGCLOSE();
+				DWORD id = pCmdrsp->clientId;
+				// find this client in our list
+				CClient* client = FindClient(id);
+				if (client)
+				{
+					// get the connection for this client
+					CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+					// pause the processing so we can delete the client 
+					conn->PauseProcessing();
+					// stop processing this client
+					client->Stop();
+					// remove client from registry
+					conn->RemoveClientFromRegistry(client);
+					// remove from connections client list
+					conn->RemoveClient(client);
+					// remove from total client list
+					RemoveClient(client);
+					// delete client
+					delete client;
+					// no more clients on this connection, disconnect this connection
+					if (conn->GetNumberClients() == 0)
+					{
+						conn->ExitProcessing();
+						conn->DoDisconnect();
+						RemoveConnection(conn);
+						delete conn;
+					}
+					else
+					{
+						conn->RestartProcessing();
+					}
+				}
+				pCmdrsp->response = eRspOK;
+				m_Server->SendResponse(pCmdrsp);
+			}
+			break;
+		case eCmdSetMessageIds:
+			{
+	TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdSetMessageIds\n");
+	TCDEBUGCLOSE();
+
+				long ret = TCAPI_ERR_NONE;
+				DWORD id = pCmdrsp->clientId;
+				bool restart = false;
+				// find client
+				CClient* client = FindClient(id);
+				if (client)
+				{
+					// get connection
+					CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+					if (conn->IsProcessingContinuing())
+					{
+						conn->PauseProcessing();
+						restart = true;
+					}
+					if (conn->IsDisconnected())
+					{
+						ret = TCAPI_ERR_MEDIA_NOT_OPEN;
+					}
+					else if (conn->IsRetryInProgress())
+					{
+						ret = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
+					}
+					else if (conn->IsRetryTimedOut())
+					{
+						ret = TCAPI_ERR_COMM_TIMEOUT;
+					}
+
+					if (ret == TCAPI_ERR_NONE)
+					{
+						// add client to connection's registry
+						conn->AddClientToRegistry(client, pCmdrsp->number, pCmdrsp->messageIds);
+					}
+					if (restart)
+						conn->RestartProcessing();
+				}
+				if (ret == TCAPI_ERR_NONE)
+				{
+					pCmdrsp->response = eRspOK;
+				}
+				else
+				{
+					pCmdrsp->response = eRspError;
+					pCmdrsp->error = ret;
+				}
+				m_Server->SendResponse(pCmdrsp);
+			}
+			break;
+		case eCmdGetNumberConnections:
+			{
+	TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdGetNumberConnections\n");
+	TCDEBUGCLOSE();
+				long num = m_ConnectionList->size();
+				pCmdrsp->response = eRspOK;
+				pCmdrsp->numConnections = num;
+				m_Server->SendResponse(pCmdrsp);
+			}
+			break;
+		case eCmdGetConnectionType:
+			{
+	TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdGetConnectionType\n");
+	TCDEBUGCLOSE();
+				long index = pCmdrsp->index;
+				CConnectionImpl* pConn = (CConnectionImpl*)FindConnection(index);
+				if (pConn != NULL)
+				{
+					pCmdrsp->response = eRspOK;
+					strncpy(pCmdrsp->connectSettings.connectType, pConn->m_ConnectSettings->connectType, MAX_CONNECTION_TYPE);
+//					pCmdrsp->connectSettings.connectType = pConn->m_ConnectSettings->connectType;
+					m_Server->SendResponse(pCmdrsp);
+				}
+				else
+				{
+					pCmdrsp->response = eRspError;
+					pCmdrsp->error = TCAPI_ERR_MISSING_CONNECTION_SPEC;
+					m_Server->SendResponse(pCmdrsp);
+				}
+			}
+			break;
+		case eCmdOpenStream:
+			{
+	TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdOpenStream\n");
+	TCDEBUGCLOSE();
+
+				long ret = TCAPI_ERR_NONE;
+				// find client
+				DWORD id = pCmdrsp->clientId;
+				CClient* client = FindClient(id);
+				if (client)
+				{
+					// get connection
+					CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+					if (conn->IsDisconnected())
+					{
+						ret = TCAPI_ERR_MEDIA_NOT_OPEN;
+					}
+					else if (conn->IsRetryInProgress())
+					{
+						ret = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
+					}
+					else if (conn->IsRetryTimedOut())
+					{
+						ret = TCAPI_ERR_COMM_TIMEOUT;
+					}
+
+					if (ret == TCAPI_ERR_NONE)
+					{
+						bool restart = false;
+						if (conn->IsProcessingContinuing())
+						{
+							restart = true;
+							conn->PauseProcessing();
+						}
+						client->OpenStream(&pCmdrsp->destinationOptions);
+						if (restart)
+							conn->RestartProcessing();
+					}
+				}
+				if (ret == TCAPI_ERR_NONE)
+				{
+					pCmdrsp->response = eRspOK;
+				}
+				else
+				{
+					pCmdrsp->response = eRspError;
+					pCmdrsp->error = ret;
+				}
+				m_Server->SendResponse(pCmdrsp);
+			}
+			break;
+		case eCmdCloseStream:
+			{
+	TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdCloseStream\n");
+	TCDEBUGCLOSE();
+
+				long ret = TCAPI_ERR_NONE;
+				DWORD id = pCmdrsp->clientId;
+				bool restart = false;
+				CClient* client = FindClient(id);
+				if (client)
+				{
+					// get connection
+					CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+					if (conn->IsConnected())
+					{
+						if (!conn->IsRetryTimedOut() && !conn->IsRetryInProgress())
+						{
+							if (conn->IsProcessingContinuing())
+							{
+								conn->PauseProcessing();
+								restart = true;
+							}
+						}
+						client->CloseStream();
+						if (!conn->IsRetryTimedOut() && !conn->IsRetryInProgress())
+						{
+							if (restart)
+								conn->RestartProcessing();
+						}
+
+					}
+				}
+				if (ret == TCAPI_ERR_NONE)
+				{
+					pCmdrsp->response = eRspOK;
+				}
+				else
+				{
+					pCmdrsp->response = eRspError;
+					pCmdrsp->error = ret;
+				}
+				m_Server->SendResponse(pCmdrsp);
+			}
+			break;
+		case eCmdOpenMessageFile:
+			{
+	TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdOpenMessageFile\n");
+	TCDEBUGCLOSE();
+
+				long ret = TCAPI_ERR_NONE;
+				// find client
+				DWORD id = pCmdrsp->clientId;
+				CClient* client = FindClient(id);
+				if (client)
+				{
+					// get connection
+					CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+					if (conn->IsDisconnected())
+					{
+						ret = TCAPI_ERR_MEDIA_NOT_OPEN;
+					}
+					else if (conn->IsRetryInProgress())
+					{
+						ret = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
+					}
+					else if (conn->IsRetryTimedOut())
+					{
+						ret = TCAPI_ERR_COMM_TIMEOUT;
+					}
+
+					if (ret == TCAPI_ERR_NONE)
+					{
+						bool restart = false;
+						if (conn->IsProcessingContinuing())
+						{
+							restart = true;
+							conn->PauseProcessing();
+						}
+						client->OpenMessageFile(&pCmdrsp->destinationOptions);
+						if (restart)
+							conn->RestartProcessing();
+					}
+				}
+				if (ret == TCAPI_ERR_NONE)
+				{
+					pCmdrsp->response = eRspOK;
+				}
+				else
+				{
+					pCmdrsp->response = eRspError;
+					pCmdrsp->error = ret;
+				}
+				m_Server->SendResponse(pCmdrsp);
+			}
+			break;
+		case eCmdCloseMessageFile:
+			{
+	TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdCloseMessageFile\n");
+	TCDEBUGCLOSE();
+
+				long ret = TCAPI_ERR_NONE;
+				DWORD id = pCmdrsp->clientId;
+				bool restart = false;
+				CClient* client = FindClient(id);
+				if (client)
+				{
+					// get connection
+					CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+					if (conn->IsConnected())
+					{
+						if (!conn->IsRetryTimedOut() && !conn->IsRetryInProgress())
+						{
+							if (conn->IsProcessingContinuing())
+							{
+								conn->PauseProcessing();
+								restart = true;
+							}
+						}
+						client->CloseMessageFile();
+						if (!conn->IsRetryTimedOut() && !conn->IsRetryInProgress())
+						{
+							if (restart)
+								conn->RestartProcessing();
+						}
+
+					}
+				}
+				if (ret == TCAPI_ERR_NONE)
+				{
+					pCmdrsp->response = eRspOK;
+				}
+				else
+				{
+					pCmdrsp->response = eRspError;
+					pCmdrsp->error = ret;
+				}
+				m_Server->SendResponse(pCmdrsp);
+			}
+			break;
+		case eCmdClearMessageFile:
+			{
+	TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdClearMessageFile\n");
+	TCDEBUGCLOSE();
+
+				long ret = TCAPI_ERR_NONE;
+				DWORD id = pCmdrsp->clientId;
+				bool restart = false;
+				CClient* client = FindClient(id);
+				if (client)
+				{
+					// get connection
+					CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+					if (conn->IsConnected())
+					{
+						if (!conn->IsRetryTimedOut() && !conn->IsRetryInProgress())
+						{
+							if (conn->IsProcessingContinuing())
+							{
+								conn->PauseProcessing();
+								restart = true;
+							}
+						}
+						client->ClearMessageFile();
+						if (restart)
+							conn->RestartProcessing();
+					}
+				}
+				if (ret == TCAPI_ERR_NONE)
+				{
+					pCmdrsp->response = eRspOK;
+				}
+				else
+				{
+					pCmdrsp->response = eRspError;
+					pCmdrsp->error = ret;
+				}
+				m_Server->SendResponse(pCmdrsp);
+			}
+			break;
+		case eCmdStart:
+			{
+	TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdStart\n");
+	TCDEBUGCLOSE();
+
+				long ret = TCAPI_ERR_NONE;
+				DWORD id = pCmdrsp->clientId;
+				CClient* client = FindClient(id);
+				if (client)
+				{
+					// get connection
+					CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+					conn->PauseProcessing();
+					if (conn->IsDisconnected())
+					{
+						ret = TCAPI_ERR_MEDIA_NOT_OPEN;
+					}
+					else if (conn->IsRetryInProgress())
+					{
+						ret = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
+					}
+					else if (conn->IsRetryTimedOut())
+					{
+						ret = TCAPI_ERR_COMM_TIMEOUT;
+					}
+
+					if (ret == TCAPI_ERR_NONE)
+					{
+						client->Start();
+						conn->RestartProcessing();
+					}
+				}
+				if (ret == TCAPI_ERR_NONE)
+				{
+					pCmdrsp->response = eRspOK;
+				}
+				else
+				{
+					pCmdrsp->response = eRspError;
+					pCmdrsp->error = ret;
+				}
+				m_Server->SendResponse(pCmdrsp);
+			}
+			break;
+		case eCmdStop:
+			{
+	TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdStop\n");
+	TCDEBUGCLOSE();
+
+				long ret = TCAPI_ERR_NONE;
+				DWORD id = pCmdrsp->clientId;
+				bool restart = false;
+				CClient* client = FindClient(id);
+				if (client)
+				{
+					// get connection
+					CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+					if (conn->IsConnected())
+					{
+						if (!conn->IsRetryTimedOut() && !conn->IsRetryInProgress())
+						{
+							if (conn->IsProcessingContinuing())
+							{
+								restart = true;
+								conn->PauseProcessing();
+							}
+						}
+						client->Stop();
+						if (!conn->IsRetryTimedOut() && !conn->IsRetryInProgress())
+						{
+							if (restart)
+								conn->RestartProcessing();
+						}
+
+					}
+				}
+				if (ret == TCAPI_ERR_NONE)
+				{
+					pCmdrsp->response = eRspOK;
+				}
+				else
+				{
+					pCmdrsp->response = eRspError;
+					pCmdrsp->error = ret;
+				}
+				m_Server->SendResponse(pCmdrsp);
+	TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdStop done\n");
+	TCDEBUGCLOSE();
+			}
+			break;
+		case eCmdSendMessage:
+			{
+	TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdSendMessage\n");
+	TCDEBUGCLOSE();
+
+				long ret = TCAPI_ERR_NONE;
+				DWORD osErr = 0;
+				DWORD id = pCmdrsp->clientId;
+				CClient* client = FindClient(id);
+				if (client)
+				{
+					CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+					if (conn->IsDisconnected())
+					{
+						ret = TCAPI_ERR_MEDIA_NOT_OPEN;
+					}
+					else if (conn->IsRetryInProgress())
+					{
+						ret = TCAPI_ERR_COMM_RETRY_IN_PROGRESS;
+					}
+					else if (conn->IsRetryTimedOut())
+					{
+						ret = TCAPI_ERR_COMM_TIMEOUT;
+					}
+
+					if (ret == TCAPI_ERR_NONE)
+					{
+	TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdSendMessage DoSendMessage\n");
+	TCDEBUGCLOSE();
+						ret = conn->DoSendMessage(pCmdrsp->encodeOption, pCmdrsp->protocolVersion, pCmdrsp->useMyId, pCmdrsp->myId, pMsg->length, pMsg->message);
+//						ret = conn->DoSendMessage(pMsg->length, pMsg->message);
+						if (ret != TCAPI_ERR_NONE)
+							osErr = conn->m_OsError;
+	TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdSendMessage DoSendMessage done\n");
+	TCDEBUGCLOSE();
+					}
+				}
+				if (ret == TCAPI_ERR_NONE)
+				{
+//	TCDEBUGOPEN();
+//				TCDEBUGLOGS(" eCmdSendMessage OK\n");
+//	TCDEBUGCLOSE();
+					pCmdrsp->response = eRspOK;
+				}
+				else
+				{
+//	TCDEBUGOPEN();
+//				TCDEBUGLOGS(" eCmdSendMessage ERROR\n");
+//	TCDEBUGCLOSE();
+					pCmdrsp->response = eRspError;
+					pCmdrsp->error = ret;
+					if (osErr > 0)
+						pCmdrsp->osError = osErr;
+					else
+						pCmdrsp->osError = 0;
+				}
+				m_Server->SendResponse(pCmdrsp);
+			}
+			break;
+		case eCmdExit:
+			{
+				TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdExit\n");
+				TCDEBUGCLOSE();
+				DoShutdown();
+				done = true;
+			}
+			break;
+		case eCmdGetNumberVersions:
+			{
+				TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdGetNumberVersions\n");
+				TCDEBUGCLOSE();
+
+				long ret = TCAPI_ERR_NONE;
+				long numberVersions = 1; // 1 for server
+				DWORD id = pCmdrsp->clientId;
+				CClient* client = FindClient(id);
+				if (client)
+				{
+					CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+					if (conn->IsConnected())
+					{
+						if (conn->HasVersion())
+							numberVersions++;
+					}
+				}
+				if (ret == TCAPI_ERR_NONE)
+				{
+					pCmdrsp->response = eRspOK;
+					pCmdrsp->number = numberVersions;
+				}
+				else
+				{
+					pCmdrsp->response = eRspError;
+					pCmdrsp->error = ret;
+				}
+				m_Server->SendResponse(pCmdrsp);
+			}
+			break;
+		case eCmdGetVersion:
+			{
+				TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdGetVersion\n");
+				TCDEBUGCLOSE();
+				// index = 1 ==> TCFServer version
+				// index = 2 ==> Connection version if it exists
+				long ret = TCAPI_ERR_NONE;
+				long index = pCmdrsp->index;
+				pCmdrsp->response = eRspOK;
+				pCmdrsp->version[0] = NULL;
+				if (index == 1)
+				{
+					pCmdrsp->response = eRspOK;
+					strncpy(pCmdrsp->version, m_Version, MAX_VERSION_STRING);
+				}
+				else if (index == 2)
+				{
+					DWORD id = pCmdrsp->clientId;
+					CClient* client = FindClient(id);
+					if (client)
+					{
+						CConnectionImpl* conn = (CConnectionImpl*)client->GetConnection();
+						if (conn->IsConnected())
+						{
+							pCmdrsp->response = eRspOK;
+							if (conn->HasVersion())
+							{
+								conn->GetVersion(pCmdrsp->version);
+							}
+						}
+						else
+						{
+							pCmdrsp->response = eRspError;
+							pCmdrsp->error = TCAPI_ERR_MEDIA_NOT_OPEN;
+						}
+					}
+				}
+				m_Server->SendResponse(pCmdrsp);
+			}
+			break;
+		case eCmdGetClientStatus:
+			{
+				TCDEBUGOPEN();
+				TCDEBUGLOGS(" eCmdGetClientStatus\n");
+				TCDEBUGCLOSE();
+				long ret = TCAPI_ERR_NONE;
+				DWORD id = pCmdrsp->clientId;
+				CClient* client = FindClient(id);
+				pCmdrsp->response = eRspOK;
+				pCmdrsp->clientStatus = eUnknownClient;
+				if (client)
+				{
+					if (client->IsStarted())
+					{
+						pCmdrsp->clientStatus = eStarted;
+					}
+					else
+					{
+						pCmdrsp->clientStatus = eStopped;
+					}
+				}
+				m_Server->SendResponse(pCmdrsp);
+			}
+			break;
+		default:
+			{
+				TCDEBUGOPEN();
+				TCDEBUGLOGA1(" unknown command = %d\n", command);
+				TCDEBUGCLOSE();
+				pCmdrsp->response = eRspOK;//eRspError;
+				pCmdrsp->error = TCAPI_ERR_FEATURE_NOT_IMPLEMENTED;
+				m_Server->SendResponse(pCmdrsp);
+			}
+			break;
+		}
+	}
+
+	pCmdrsp->response = eRspExitted;
+	m_Server->SendResponse(&cmdrsp);
+
+	if (pMsg)
+		delete pMsg;
+
+	TCDEBUGOPEN();
+	TCDEBUGLOGS("CServerManager::CommandThread exitting\n");
+	TCDEBUGCLOSE();
+}
+
+CConnection* CServerManager::FindConnection(pConnectData pConData)
+{
+	TCDEBUGLOGS("CServerManager::FindConnection1\n");
+	CConnection* connection = NULL;
+
+	if (m_ConnectionList->size() != 0)
+	{
+		ConnectionList::iterator pConn;
+		for (pConn = m_ConnectionList->begin(); pConn != m_ConnectionList->end(); pConn++)
+		{
+			if ((*pConn)->IsEqual(pConData))
+			{
+				connection = *pConn;
+				break;
+			}
+		}
+	}
+
+	TCDEBUGLOGA1("CServerManager::FindConnection1 connection=%x\n", connection);
+	return connection;
+
+}
+CConnection* CServerManager::FindConnection(long index)
+{
+	TCDEBUGLOGS("CServerManager::FindConnection2\n");
+	CConnection* connection = NULL;
+
+	if (m_ConnectionList->size() >= index)
+	{
+		connection = m_ConnectionList->at(index);
+	}
+
+	TCDEBUGLOGA1("CServerManager::FindConnection2 connection=%x\n", connection);
+	return connection;
+}
+CClient* CServerManager::FindClient(DWORD id)
+{
+	CClient* found = NULL;
+
+	if (m_ClientList->size() != 0)
+	{
+		ClientList::iterator iter;
+		for (iter = m_ClientList->begin(); iter != m_ClientList->end(); iter++)
+		{
+			if ((*iter)->GetClientId() == id)
+			{
+				found = *iter;
+				break;
+			}
+		}
+	}
+	return found;
+}
+
+BOOL CServerManager::RemoveClient(CClient* client)
+{
+	BOOL found = FALSE;
+
+	if (m_ClientList->size() != 0)
+	{
+		ClientList::iterator iter;
+		for (iter = m_ClientList->begin(); iter != m_ClientList->end(); iter++)
+		{
+			if ((*iter)->GetClientId() == client->GetClientId())
+			{
+				m_ClientList->erase(iter);
+				found = TRUE;
+				break;
+			}
+		}
+	}
+	return found;
+}
+
+BOOL CServerManager::RemoveConnection(CConnection* conn)
+{
+	BOOL found = FALSE;
+
+	if (m_ConnectionList->size() != 0)
+	{
+		ConnectionList::iterator iter;
+		for (iter = m_ConnectionList->begin(); iter != m_ConnectionList->end(); iter++)
+		{
+			if ((*iter)->GetConnectionId() == conn->GetConnectionId())
+			{
+				m_ConnectionList->erase(iter);
+				found = TRUE;
+				break;
+			}
+		}
+	}
+	return found;
+}
+
+void CServerManager::DoShutdown()
+{
+	// for each connection
+	// stop processing on that connection
+	// disconnect that connection
+	if (m_ConnectionList->size() != 0)
+	{
+		ConnectionList::iterator pConn;
+		for (pConn = m_ConnectionList->begin(); pConn != m_ConnectionList->end(); pConn++)
+		{
+			(*pConn)->ExitProcessing();
+			(*pConn)->DoDisconnect();
+			delete (*pConn);
+		}
+	}
+}
+void CServerManager::RegisterAllComms()
+{
+	TCDEBUGLOGS("CServerManager::RegisterAllComms\n");
+
+	m_CommList->clear();
+	if (m_ExeLocation && (m_ExeLocation[0] != '\0'))
+	{
+		char* searchPath = new char[MAX_EXEPATHNAME];
+		char* loadPath = new char[MAX_EXEPATHNAME];
+		strncpy(searchPath, m_ExeLocation, MAX_EXEPATHNAME);
+		sprintf(searchPath, "%s%c*", searchPath, PATH_DELIMITER);
+
+		TCDEBUGLOGA1("CServerManager::RegisterAllComms searchPath=%s\n", searchPath);
+		
+		WIN32_FIND_DATA fileData;
+
+		HANDLE sh = ::FindFirstFile(searchPath, &fileData);
+		if (sh != INVALID_HANDLE_VALUE)
+		{
+			BOOL done = FALSE;
+			while (!done)
+			{
+				TCDEBUGLOGA1("CServerManager::RegisterAllComms file=%s\n", fileData.cFileName);
+				if (strncmp(fileData.cFileName, COMMDLL_BASENAME, strlen(COMMDLL_BASENAME)) == 0)
+				{
+					sprintf(loadPath, "%s%c%s", m_ExeLocation, PATH_DELIMITER, fileData.cFileName);
+					TCDEBUGLOGA1("CServerManager::RegisterAllComms loadPath=%s\n", loadPath);
+
+					HINSTANCE hLib = ::LoadLibrary(loadPath);
+					TCDEBUGLOGA1("CServerManager::RegisterAllComms hLib=%x\n", hLib);
+
+					if (hLib)
+					{
+						TCDEBUGLOGS("CServerManager::RegisterAllComms - library loaded\n");
+
+						COMMREGISTER lpFn = (COMMREGISTER)::GetProcAddress(hLib, COMMREGISTER_FNNAME);
+						TCDEBUGLOGA1("CServerManager::RegisterAllComms lpFn=%x\n", lpFn);
+
+						if (lpFn)
+						{
+							TCDEBUGLOGS("CServerManager::RegisterAllComms - function found\n");
+							const char* pType = lpFn();
+							if (pType)
+							{
+								TCDEBUGLOGA1("CServerManager::RegisterAllComms pType=%s\n", pType);
+								CCommRegistryItem* pComm = new CCommRegistryItem();
+								strcpy(pComm->m_CommLibrary, loadPath);
+								strcpy(pComm->m_CommType, pType);
+								m_CommList->push_back(pComm);
+							}
+						}
+						::FreeLibrary(hLib);
+					}
+				}
+				BOOL fNext = ::FindNextFile(sh, &fileData);
+				if (fNext == FALSE)
+					done = TRUE;
+			}
+			::FindClose(sh);
+		}
+		delete[] searchPath;
+		delete[] loadPath;
+	}
+	TCDEBUGLOGS("CServerManager::RegisterAllComms\n");
+}
+
+void CServerManager::RegisterAllProtocols()
+{
+	TCDEBUGLOGS("CServerManager::RegisterAllProtocols\n");
+
+	m_ProtocolList->clear();
+	if (m_ExeLocation && (m_ExeLocation[0] != '\0'))
+	{
+		char* searchPath = new char[MAX_EXEPATHNAME];
+		char* loadPath = new char[MAX_EXEPATHNAME];
+		strncpy(searchPath, m_ExeLocation, MAX_EXEPATHNAME);
+		sprintf(searchPath, "%s%c*", searchPath, PATH_DELIMITER);
+
+		TCDEBUGLOGA1("CServerManager::RegisterAllProtocols searchPath=%s\n", searchPath);
+		
+		WIN32_FIND_DATA fileData;
+
+		HANDLE sh = ::FindFirstFile(searchPath, &fileData);
+		BOOL done = FALSE;
+
+		if (sh != INVALID_HANDLE_VALUE)
+		{
+			BOOL done = FALSE;
+			while (!done)
+			{
+				TCDEBUGLOGA1("CServerManager::RegisterAllProtocols file=%s\n", fileData.cFileName);
+				if (strncmp(fileData.cFileName, PROTOCOLDLL_BASENAME, strlen(PROTOCOLDLL_BASENAME)) == 0)
+				{
+					sprintf(loadPath, "%s%c%s", m_ExeLocation, PATH_DELIMITER, fileData.cFileName);
+					TCDEBUGLOGA1("CServerManager::RegisterAllProtocols loadPath=%s\n", loadPath);
+
+					HINSTANCE hLib = ::LoadLibrary(loadPath);
+					TCDEBUGLOGA1("CServerManager::RegisterAllProtocols hLib=%x\n", hLib);
+
+					if (hLib)
+					{
+						TCDEBUGLOGS("CServerManager::RegisterAllProtocols - library loaded\n");
+
+						PROTOCOLREGISTER lpFn = (PROTOCOLREGISTER)::GetProcAddress(hLib, PROTOCOLREGISTER_FNNAME);
+						TCDEBUGLOGA1("CServerManager::RegisterAllProtocols lpFn=%x\n", lpFn);
+
+						if (lpFn)
+						{
+							TCDEBUGLOGS("CServerManager::RegisterAllProtocols - function found\n");
+							const char* pType = lpFn();
+							if (pType)
+							{
+								TCDEBUGLOGA1("CServerManager::RegisterAllProtocols pType=%s\n", pType);
+								CProtocolRegistryItem* pProt = new CProtocolRegistryItem();
+								strcpy(pProt->m_ProtocolLibrary, loadPath);
+								strcpy(pProt->m_ProtocolType, pType);
+								m_ProtocolList->push_back(pProt);
+							}
+						}
+						::FreeLibrary(hLib);
+					}
+				}
+				BOOL fNext = ::FindNextFile(sh, &fileData);
+				if (fNext == FALSE)
+					done = TRUE;
+			}
+			::FindClose(sh);
+		}
+		delete[] searchPath;
+		delete[] loadPath;
+	}
+	TCDEBUGLOGS("CServerManager::RegisterAllProtocols\n");
+}
+
+void CServerManager::UnRegisterAllComms()
+{
+}
+
+void CServerManager::UnRegisterAllProtocols()
+{
+}
+
+const char* CServerManager::FindProtocolPath(char* protocolType)
+{
+	char* path = NULL;
+
+	TCDEBUGLOGS("CServerManager::FindProtocolPath\n");
+	if (m_ProtocolList->size() != 0)
+	{
+		ProtocolRegistry::iterator iter;
+		for (iter = m_ProtocolList->begin(); iter != m_ProtocolList->end(); iter++)
+		{
+			if (strcmp((*iter)->m_ProtocolType, protocolType) == 0)
+			{
+				path = (*iter)->m_ProtocolLibrary;
+				break;
+			}
+		}
+	}
+
+	TCDEBUGLOGA1("CServerManager::FindProtocolPath path=%s\n", path);
+	return path;
+}
+
+const char* CServerManager::FindCommPath(char* commType)
+{
+	char* path = NULL;
+
+	TCDEBUGLOGS("CServerManager::FindCommPath\n");
+	if (m_CommList->size() != 0)
+	{
+		CommRegistry::iterator iter;
+		for (iter = m_CommList->begin(); iter != m_CommList->end(); iter++)
+		{
+			if (strcmp((*iter)->m_CommType, commType) == 0)
+			{
+				path = (*iter)->m_CommLibrary;
+				break;
+			}
+		}
+	}
+
+	TCDEBUGLOGA1("CServerManager::FindCommPath path=%s\n", path);
+	return path;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/ServerManager.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// ServerManager.h: interface for the CServerManager class.
+//
+// Only one of these exists
+//
+//////////////////////////////////////////////////////////////////////
+
+#if !defined(AFX_SERVERMANAGER_H__30A5EF01_35BA_4B83_AA68_91F7DA0249B7__INCLUDED_)
+#define AFX_SERVERMANAGER_H__30A5EF01_35BA_4B83_AA68_91F7DA0249B7__INCLUDED_
+
+#include "ServerClient.h"
+#include "TCErrorConstants.h"
+#include "TCDebugLog.h"
+#include "Connection.h"
+#include "Client.h"
+#include "ProtocolRegistryItem.h"
+#include "CommRegistryItem.h"
+#include <vector>
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+typedef std::vector<CConnection*> ConnectionList;
+typedef std::vector<CClient*> ClientList;
+typedef std::vector<CProtocolRegistryItem*> ProtocolRegistry;
+typedef std::vector<CCommRegistryItem*> CommRegistry;
+
+#define MAX_EXEPATHNAME (2048)
+
+#ifdef _WIN32
+#define PATH_DELIMITER '\\'
+#else
+#error not Windows
+#endif
+
+class CServerManager  
+{
+public:
+	CServerManager();
+	virtual ~CServerManager();
+	CServerManager(const char* exeLocation);
+
+	void CommandThread();
+	CConnection* FindConnection(pConnectData pConData);
+	CConnection* FindConnection(long index);
+	CClient* FindClient(DWORD id);
+	BOOL RemoveClient(CClient* client);		// remove from m_ClientList
+	BOOL RemoveConnection(CConnection* conn);	// remove from m_ConnectionList
+	void DoShutdown();
+private:
+	void RegisterAllProtocols();
+	void RegisterAllComms();
+	void UnRegisterAllProtocols();
+	void UnRegisterAllComms();
+	const char* FindProtocolPath(char* protocolType);
+	const char* FindCommPath(char* commType);
+
+public:
+	CServerCommand* m_Server;			// client/server commands/responses
+	TCDebugLog* m_DebugLog;
+	ConnectionList* m_ConnectionList;	// all connections
+	ClientList* m_ClientList;			// all clients
+	DWORD m_NextClientId;				// next client ID
+	DWORD m_NextConnectionId;			// next connection ID
+	char m_Version[MAX_VERSION_STRING]; // our version string
+	ProtocolRegistry* m_ProtocolList;	// protocols (e.g., OST, etc)
+	CommRegistry* m_CommList;			// comm connections (e.g., TCP, etc)
+	char* m_ExeLocation;				// current location of TCFServer
+};
+
+#endif // !defined(AFX_SERVERMANAGER_H__30A5EF01_35BA_4B83_AA68_91F7DA0249B7__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/StdAfx.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// stdafx.cpp : source file that includes just the standard includes
+//	TCFServer.pch will be the pre-compiled header
+//	stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/StdAfx.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// stdafx.h : include file for standard system include files,
+//  or project specific include files that are used frequently, but
+//      are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__93DE6A0B_4CE2_49DE_915F_A981F08BBB8A__INCLUDED_)
+#define AFX_STDAFX_H__93DE6A0B_4CE2_49DE_915F_A981F08BBB8A__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+// Insert your headers here
+#define WIN32_LEAN_AND_MEAN		// Exclude rarely-used stuff from Windows headers
+
+#define TCF_SERVER
+
+#include <stdlib.h>
+#include <windows.h>
+#include <winsock2.h>
+
+// TODO: reference additional headers your program requires here
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__93DE6A0B_4CE2_49DE_915F_A981F08BBB8A__INCLUDED_)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/TCFServer.cpp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,108 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// TCFServer.cpp : Defines the entry point for the console application.
+//
+
+#include "stdafx.h"
+#include "ServerClient.h"
+#include "ServerManager.h"
+#include <vector>
+#include <sys/stat.h>
+
+CServerManager* gManager;
+char gServerLocation[2048]={0};
+
+#ifdef _DEBUG
+BOOL gDoLogging=FALSE;
+char TCDebugMsg[1000];
+#define TCDEBUGOPEN() gManager->m_DebugLog->WaitForAccess();
+#define TCDEBUGLOGS(s) sprintf(TCDebugMsg,"%s", s); gManager->m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA1(s, a1) sprintf(TCDebugMsg, s, a1); gManager->m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA2(s, a1, a2) sprintf(TCDebugMsg, s, a1, a2); gManager->m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGLOGA3(s, a1, a2, a3) sprintf(TCDebugMsg, s, a1, a2, a3); gManager->m_DebugLog->log(TCDebugMsg);
+#define TCDEBUGCLOSE() gManager->m_DebugLog->ReleaseAccess();
+#else
+#define TCDEBUGOPEN()
+#define TCDEBUGLOGS(s)
+#define TCDEBUGLOGA1(s, a1)
+#define TCDEBUGLOGA2(s, a1, a2)
+#define TCDEBUGLOGA3(s, a1, a2, a3)
+#define TCDEBUGCLOSE()
+#endif
+static void GetServerLocation(char* cl);
+#ifdef _DEBUG
+static void LogTime(FILE* f);
+#endif
+int main(int argc, char* argv[])
+{
+#ifdef _DEBUG
+	struct _stat buf;
+	char* dirname = "c:\\tcf";
+	int result = _stat(dirname, &buf);
+	if (result == 0)
+	{
+		gDoLogging = TRUE;
+	}
+	else
+	{
+		gDoLogging = FALSE;
+	}
+#endif
+
+
+	if (argc == 2) // for running from the debugger
+	{
+		GetServerLocation(argv[1]);
+	}
+	else
+	{
+		GetServerLocation(argv[0]);
+	}
+#ifdef _DEBUG
+	if (gDoLogging)
+	{
+		FILE* f = fopen("c:\\tcf\\TCFServer_Main.txt", "at");
+		LogTime(f);
+		fprintf(f,"ExeLocation=%s\n", gServerLocation);
+		fclose(f);
+	}
+#endif
+	gManager = new CServerManager(gServerLocation);
+	gManager->CommandThread();
+	delete gManager;
+	return 0;
+}
+#ifdef _DEBUG
+static void LogTime(FILE* f)
+{
+	SYSTEMTIME sTime;
+	GetLocalTime(&sTime);
+	if (f)
+		fprintf(f, "%02.2d%02.2d-%02.2d:%02.2d:%02.2d.%03.3d: ", sTime.wDay, sTime.wMonth, sTime.wHour, sTime.wMinute, sTime.wSecond, sTime.wMilliseconds);
+}
+#endif
+#ifdef _WIN32
+void GetServerLocation(char* cl)
+{
+	char dir[_MAX_DIR];
+	char drive[_MAX_DRIVE];
+	_splitpath(cl, drive, dir, NULL, NULL);
+	sprintf(gServerLocation, "%s%s", drive, dir);
+}
+#else
+#error not Windows
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/TCFServer.dep	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,266 @@
+# Microsoft Developer Studio Generated Dependency File, included by TCFServer.mak
+
+.\Client.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\BaseCom.h"\
+	".\BaseProtocol.h"\
+	".\Client.h"\
+	".\CommRegistryItem.h"\
+	".\Connection.h"\
+	".\MessageFile.h"\
+	".\ProtocolRegistryItem.h"\
+	".\Registry.h"\
+	".\ServerManager.h"\
+	
+
+.\CommRegistryItem.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\BaseCom.h"\
+	".\BaseProtocol.h"\
+	".\Client.h"\
+	".\CommRegistryItem.h"\
+	".\MessageFile.h"\
+	".\Registry.h"\
+	
+
+.\Connection.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\BaseCom.h"\
+	".\BaseProtocol.h"\
+	".\Client.h"\
+	".\CommRegistryItem.h"\
+	".\Connection.h"\
+	".\MessageFile.h"\
+	".\ProtocolRegistryItem.h"\
+	".\Registry.h"\
+	".\ServerManager.h"\
+	
+
+.\ConnectionImpl.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\BaseCom.h"\
+	".\BaseProtocol.h"\
+	".\Client.h"\
+	".\CommRegistryItem.h"\
+	".\Connection.h"\
+	".\ConnectionImpl.h"\
+	".\MessageFile.h"\
+	".\ProtocolRegistryItem.h"\
+	".\Registry.h"\
+	".\RegistryImpl.h"\
+	".\ServerManager.h"\
+	
+
+..\Common\Source\ErrorMonitorData.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\BaseCom.h"\
+	".\BaseProtocol.h"\
+	".\Client.h"\
+	".\CommRegistryItem.h"\
+	".\Connection.h"\
+	".\MessageFile.h"\
+	".\ProtocolRegistryItem.h"\
+	".\Registry.h"\
+	".\ServerManager.h"\
+	
+
+..\Common\Source\InputStream.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\BaseCom.h"\
+	".\BaseProtocol.h"\
+	".\Client.h"\
+	".\CommRegistryItem.h"\
+	".\Connection.h"\
+	".\MessageFile.h"\
+	".\ProtocolRegistryItem.h"\
+	".\Registry.h"\
+	".\ServerManager.h"\
+	
+
+.\MessageFile.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\BaseCom.h"\
+	".\BaseProtocol.h"\
+	".\Client.h"\
+	".\CommRegistryItem.h"\
+	".\Connection.h"\
+	".\MessageFile.h"\
+	".\ProtocolRegistryItem.h"\
+	".\Registry.h"\
+	".\ServerManager.h"\
+	
+
+..\Common\Source\mutex.cpp : \
+	"..\Common\Headers\mutex.h"\
+	
+
+.\ProtocolRegistryItem.cpp : \
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	".\BaseProtocol.h"\
+	".\ProtocolRegistryItem.h"\
+	
+
+.\Registry.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\BaseCom.h"\
+	".\BaseProtocol.h"\
+	".\Client.h"\
+	".\CommRegistryItem.h"\
+	".\Connection.h"\
+	".\MessageFile.h"\
+	".\ProtocolRegistryItem.h"\
+	".\Registry.h"\
+	".\ServerManager.h"\
+	
+
+.\RegistryImpl.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\Client.h"\
+	".\MessageFile.h"\
+	".\Registry.h"\
+	".\RegistryImpl.h"\
+	
+
+..\Common\Source\ServerClient.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\BaseCom.h"\
+	".\BaseProtocol.h"\
+	".\Client.h"\
+	".\CommRegistryItem.h"\
+	".\Connection.h"\
+	".\MessageFile.h"\
+	".\ProtocolRegistryItem.h"\
+	".\Registry.h"\
+	".\ServerManager.h"\
+	
+
+.\ServerManager.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\BaseCom.h"\
+	".\BaseProtocol.h"\
+	".\Client.h"\
+	".\CommRegistryItem.h"\
+	".\Connection.h"\
+	".\ConnectionImpl.h"\
+	".\MessageFile.h"\
+	".\ProtocolRegistryItem.h"\
+	".\Registry.h"\
+	".\resource.h"\
+	".\ServerManager.h"\
+	
+
+..\Common\Source\shareddata.cpp : \
+	"..\Common\Headers\shareddata.h"\
+	
+
+.\StdAfx.cpp : \
+	".\StdAfx.h"\
+	
+
+..\Common\Source\TCDebugLog.cpp : \
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	
+
+.\TCFServer.cpp : \
+	"..\Common\Headers\ErrorMonitorData.h"\
+	"..\Common\Headers\InputStream.h"\
+	"..\Common\Headers\mutex.h"\
+	"..\Common\Headers\ServerClient.h"\
+	"..\Common\Headers\shareddata.h"\
+	"..\Common\Headers\TCConstants.h"\
+	"..\Common\Headers\TCDebugLog.h"\
+	"..\Common\Headers\TCErrorConstants.h"\
+	".\BaseCom.h"\
+	".\BaseProtocol.h"\
+	".\Client.h"\
+	".\CommRegistryItem.h"\
+	".\Connection.h"\
+	".\MessageFile.h"\
+	".\ProtocolRegistryItem.h"\
+	".\Registry.h"\
+	".\ServerManager.h"\
+	
+
+.\resource.rc : \
+	".\resource.h"\
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/TCFServer.dsp	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,269 @@
+# Microsoft Developer Studio Project File - Name="TCFServer" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Console Application" 0x0103
+
+CFG=TCFServer - Win32 Debug
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFServer.mak".
+!MESSAGE 
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFServer.mak" CFG="TCFServer - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "TCFServer - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "TCFServer - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE 
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+RSC=rc.exe
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c
+# ADD CPP /nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c
+# ADD BASE RSC /l 0x409 /d "NDEBUG"
+# ADD RSC /l 0x409 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib shlwapi.lib /nologo /subsystem:console /machine:I386
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy binary
+PostBuild_Cmds=copybinaries Release
+# End Special Build Tool
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 1
+# PROP BASE Output_Dir "Debug"
+# PROP BASE Intermediate_Dir "Debug"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 1
+# PROP Output_Dir "Debug"
+# PROP Intermediate_Dir "Debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c
+# ADD CPP /nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /Yu"stdafx.h" /FD /GZ /c
+# ADD BASE RSC /l 0x409 /d "_DEBUG"
+# ADD RSC /l 0x409 /d "_DEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib shlwapi.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
+# Begin Special Build Tool
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy binary
+PostBuild_Cmds=copybinaries Debug
+# End Special Build Tool
+
+!ENDIF 
+
+# Begin Target
+
+# Name "TCFServer - Win32 Release"
+# Name "TCFServer - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\Client.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\CommRegistryItem.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Connection.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\ConnectionImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\ErrorMonitorData.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\InputStream.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\MessageFile.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\mutex.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\ProtocolRegistryItem.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\Registry.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\RegistryImpl.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\ServerClient.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\ServerManager.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\shareddata.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.cpp
+# ADD CPP /Yc"stdafx.h"
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+# End Source File
+# Begin Source File
+
+SOURCE=.\TCFServer.cpp
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\BaseCom.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\BaseProtocol.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Client.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\CommRegistryItem.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Connection.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ConnectionImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\ErrorMonitorData.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\InputStream.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\MessageFile.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\mutex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ProtocolRegistryItem.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\Registry.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\RegistryImpl.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\ServerClient.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\ServerManager.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\shareddata.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\StdAfx.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\TCConstants.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\TCDebugLog.h
+# End Source File
+# Begin Source File
+
+SOURCE=..\Common\Headers\TCErrorConstants.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\resource.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\resource.rc
+# End Source File
+# End Group
+# Begin Source File
+
+SOURCE=.\ReadMe.txt
+# End Source File
+# End Target
+# End Project
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/TCFServer.mak	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,618 @@
+# Microsoft Developer Studio Generated NMAKE File, Based on TCFServer.dsp
+!IF "$(CFG)" == ""
+CFG=TCFServer - Win32 Debug
+!MESSAGE No configuration specified. Defaulting to TCFServer - Win32 Debug.
+!ENDIF 
+
+!IF "$(CFG)" != "TCFServer - Win32 Release" && "$(CFG)" != "TCFServer - Win32 Debug"
+!MESSAGE Invalid configuration "$(CFG)" specified.
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE 
+!MESSAGE NMAKE /f "TCFServer.mak" CFG="TCFServer - Win32 Debug"
+!MESSAGE 
+!MESSAGE Possible choices for configuration are:
+!MESSAGE 
+!MESSAGE "TCFServer - Win32 Release" (based on "Win32 (x86) Console Application")
+!MESSAGE "TCFServer - Win32 Debug" (based on "Win32 (x86) Console Application")
+!MESSAGE 
+!ERROR An invalid configuration is specified.
+!ENDIF 
+
+!IF "$(OS)" == "Windows_NT"
+NULL=
+!ELSE 
+NULL=nul
+!ENDIF 
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+OUTDIR=.\Release
+INTDIR=.\Release
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFServer.exe"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\Client.obj"
+	-@erase "$(INTDIR)\CommRegistryItem.obj"
+	-@erase "$(INTDIR)\Connection.obj"
+	-@erase "$(INTDIR)\ConnectionImpl.obj"
+	-@erase "$(INTDIR)\ErrorMonitorData.obj"
+	-@erase "$(INTDIR)\InputStream.obj"
+	-@erase "$(INTDIR)\MessageFile.obj"
+	-@erase "$(INTDIR)\mutex.obj"
+	-@erase "$(INTDIR)\ProtocolRegistryItem.obj"
+	-@erase "$(INTDIR)\Registry.obj"
+	-@erase "$(INTDIR)\RegistryImpl.obj"
+	-@erase "$(INTDIR)\resource.res"
+	-@erase "$(INTDIR)\ServerClient.obj"
+	-@erase "$(INTDIR)\ServerManager.obj"
+	-@erase "$(INTDIR)\shareddata.obj"
+	-@erase "$(INTDIR)\StdAfx.obj"
+	-@erase "$(INTDIR)\TCDebugLog.obj"
+	-@erase "$(INTDIR)\TCFServer.obj"
+	-@erase "$(INTDIR)\TCFServer.pch"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(OUTDIR)\TCFServer.exe"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\TCFServer.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+RSC=rc.exe
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\resource.res" /d "NDEBUG" 
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFServer.bsc" 
+BSC32_SBRS= \
+	
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib shlwapi.lib /nologo /subsystem:console /incremental:no /pdb:"$(OUTDIR)\TCFServer.pdb" /machine:I386 /out:"$(OUTDIR)\TCFServer.exe" 
+LINK32_OBJS= \
+	"$(INTDIR)\Client.obj" \
+	"$(INTDIR)\CommRegistryItem.obj" \
+	"$(INTDIR)\Connection.obj" \
+	"$(INTDIR)\ConnectionImpl.obj" \
+	"$(INTDIR)\ErrorMonitorData.obj" \
+	"$(INTDIR)\InputStream.obj" \
+	"$(INTDIR)\MessageFile.obj" \
+	"$(INTDIR)\mutex.obj" \
+	"$(INTDIR)\ProtocolRegistryItem.obj" \
+	"$(INTDIR)\Registry.obj" \
+	"$(INTDIR)\RegistryImpl.obj" \
+	"$(INTDIR)\ServerClient.obj" \
+	"$(INTDIR)\ServerManager.obj" \
+	"$(INTDIR)\shareddata.obj" \
+	"$(INTDIR)\StdAfx.obj" \
+	"$(INTDIR)\TCDebugLog.obj" \
+	"$(INTDIR)\TCFServer.obj" \
+	"$(INTDIR)\resource.res"
+
+"$(OUTDIR)\TCFServer.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy binary
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Release
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFServer.exe"
+   copybinaries Release
+	echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+OUTDIR=.\Debug
+INTDIR=.\Debug
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+ALL : "$(OUTDIR)\TCFServer.exe" "$(OUTDIR)\TCFServer.bsc"
+
+
+CLEAN :
+	-@erase "$(INTDIR)\Client.obj"
+	-@erase "$(INTDIR)\Client.sbr"
+	-@erase "$(INTDIR)\CommRegistryItem.obj"
+	-@erase "$(INTDIR)\CommRegistryItem.sbr"
+	-@erase "$(INTDIR)\Connection.obj"
+	-@erase "$(INTDIR)\Connection.sbr"
+	-@erase "$(INTDIR)\ConnectionImpl.obj"
+	-@erase "$(INTDIR)\ConnectionImpl.sbr"
+	-@erase "$(INTDIR)\ErrorMonitorData.obj"
+	-@erase "$(INTDIR)\ErrorMonitorData.sbr"
+	-@erase "$(INTDIR)\InputStream.obj"
+	-@erase "$(INTDIR)\InputStream.sbr"
+	-@erase "$(INTDIR)\MessageFile.obj"
+	-@erase "$(INTDIR)\MessageFile.sbr"
+	-@erase "$(INTDIR)\mutex.obj"
+	-@erase "$(INTDIR)\mutex.sbr"
+	-@erase "$(INTDIR)\ProtocolRegistryItem.obj"
+	-@erase "$(INTDIR)\ProtocolRegistryItem.sbr"
+	-@erase "$(INTDIR)\Registry.obj"
+	-@erase "$(INTDIR)\Registry.sbr"
+	-@erase "$(INTDIR)\RegistryImpl.obj"
+	-@erase "$(INTDIR)\RegistryImpl.sbr"
+	-@erase "$(INTDIR)\resource.res"
+	-@erase "$(INTDIR)\ServerClient.obj"
+	-@erase "$(INTDIR)\ServerClient.sbr"
+	-@erase "$(INTDIR)\ServerManager.obj"
+	-@erase "$(INTDIR)\ServerManager.sbr"
+	-@erase "$(INTDIR)\shareddata.obj"
+	-@erase "$(INTDIR)\shareddata.sbr"
+	-@erase "$(INTDIR)\StdAfx.obj"
+	-@erase "$(INTDIR)\StdAfx.sbr"
+	-@erase "$(INTDIR)\TCDebugLog.obj"
+	-@erase "$(INTDIR)\TCDebugLog.sbr"
+	-@erase "$(INTDIR)\TCFServer.obj"
+	-@erase "$(INTDIR)\TCFServer.pch"
+	-@erase "$(INTDIR)\TCFServer.sbr"
+	-@erase "$(INTDIR)\vc60.idb"
+	-@erase "$(INTDIR)\vc60.pdb"
+	-@erase "$(OUTDIR)\TCFServer.bsc"
+	-@erase "$(OUTDIR)\TCFServer.exe"
+	-@erase "$(OUTDIR)\TCFServer.ilk"
+	-@erase "$(OUTDIR)\TCFServer.pdb"
+
+"$(OUTDIR)" :
+    if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)"
+
+CPP=cl.exe
+CPP_PROJ=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFServer.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+.c{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.obj::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.c{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cpp{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+.cxx{$(INTDIR)}.sbr::
+   $(CPP) @<<
+   $(CPP_PROJ) $< 
+<<
+
+RSC=rc.exe
+RSC_PROJ=/l 0x409 /fo"$(INTDIR)\resource.res" /d "_DEBUG" 
+BSC32=bscmake.exe
+BSC32_FLAGS=/nologo /o"$(OUTDIR)\TCFServer.bsc" 
+BSC32_SBRS= \
+	"$(INTDIR)\Client.sbr" \
+	"$(INTDIR)\CommRegistryItem.sbr" \
+	"$(INTDIR)\Connection.sbr" \
+	"$(INTDIR)\ConnectionImpl.sbr" \
+	"$(INTDIR)\ErrorMonitorData.sbr" \
+	"$(INTDIR)\InputStream.sbr" \
+	"$(INTDIR)\MessageFile.sbr" \
+	"$(INTDIR)\mutex.sbr" \
+	"$(INTDIR)\ProtocolRegistryItem.sbr" \
+	"$(INTDIR)\Registry.sbr" \
+	"$(INTDIR)\RegistryImpl.sbr" \
+	"$(INTDIR)\ServerClient.sbr" \
+	"$(INTDIR)\ServerManager.sbr" \
+	"$(INTDIR)\shareddata.sbr" \
+	"$(INTDIR)\StdAfx.sbr" \
+	"$(INTDIR)\TCDebugLog.sbr" \
+	"$(INTDIR)\TCFServer.sbr"
+
+"$(OUTDIR)\TCFServer.bsc" : "$(OUTDIR)" $(BSC32_SBRS)
+    $(BSC32) @<<
+  $(BSC32_FLAGS) $(BSC32_SBRS)
+<<
+
+LINK32=link.exe
+LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib shlwapi.lib /nologo /subsystem:console /incremental:yes /pdb:"$(OUTDIR)\TCFServer.pdb" /debug /machine:I386 /out:"$(OUTDIR)\TCFServer.exe" /pdbtype:sept 
+LINK32_OBJS= \
+	"$(INTDIR)\Client.obj" \
+	"$(INTDIR)\CommRegistryItem.obj" \
+	"$(INTDIR)\Connection.obj" \
+	"$(INTDIR)\ConnectionImpl.obj" \
+	"$(INTDIR)\ErrorMonitorData.obj" \
+	"$(INTDIR)\InputStream.obj" \
+	"$(INTDIR)\MessageFile.obj" \
+	"$(INTDIR)\mutex.obj" \
+	"$(INTDIR)\ProtocolRegistryItem.obj" \
+	"$(INTDIR)\Registry.obj" \
+	"$(INTDIR)\RegistryImpl.obj" \
+	"$(INTDIR)\ServerClient.obj" \
+	"$(INTDIR)\ServerManager.obj" \
+	"$(INTDIR)\shareddata.obj" \
+	"$(INTDIR)\StdAfx.obj" \
+	"$(INTDIR)\TCDebugLog.obj" \
+	"$(INTDIR)\TCFServer.obj" \
+	"$(INTDIR)\resource.res"
+
+"$(OUTDIR)\TCFServer.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS)
+    $(LINK32) @<<
+  $(LINK32_FLAGS) $(LINK32_OBJS)
+<<
+
+SOURCE="$(InputPath)"
+PostBuild_Desc=copy binary
+DS_POSTBUILD_DEP=$(INTDIR)\postbld.dep
+
+ALL : $(DS_POSTBUILD_DEP)
+
+# Begin Custom Macros
+OutDir=.\Debug
+# End Custom Macros
+
+$(DS_POSTBUILD_DEP) : "$(OUTDIR)\TCFServer.exe" "$(OUTDIR)\TCFServer.bsc"
+   copybinaries Debug
+	echo Helper for Post-build step > "$(DS_POSTBUILD_DEP)"
+
+!ENDIF 
+
+
+!IF "$(NO_EXTERNAL_DEPS)" != "1"
+!IF EXISTS("TCFServer.dep")
+!INCLUDE "TCFServer.dep"
+!ELSE 
+!MESSAGE Warning: cannot find "TCFServer.dep"
+!ENDIF 
+!ENDIF 
+
+
+!IF "$(CFG)" == "TCFServer - Win32 Release" || "$(CFG)" == "TCFServer - Win32 Debug"
+SOURCE=.\Client.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\Client.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\Client.obj"	"$(INTDIR)\Client.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF 
+
+SOURCE=.\CommRegistryItem.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\CommRegistryItem.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\CommRegistryItem.obj"	"$(INTDIR)\CommRegistryItem.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF 
+
+SOURCE=.\Connection.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\Connection.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\Connection.obj"	"$(INTDIR)\Connection.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF 
+
+SOURCE=.\ConnectionImpl.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\ConnectionImpl.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\ConnectionImpl.obj"	"$(INTDIR)\ConnectionImpl.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF 
+
+SOURCE=..\Common\Source\ErrorMonitorData.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\ErrorMonitorData.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\ErrorMonitorData.obj"	"$(INTDIR)\ErrorMonitorData.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=..\Common\Source\InputStream.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\InputStream.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\InputStream.obj"	"$(INTDIR)\InputStream.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\MessageFile.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\MessageFile.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\MessageFile.obj"	"$(INTDIR)\MessageFile.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF 
+
+SOURCE=..\Common\Source\mutex.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\mutex.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\mutex.obj"	"$(INTDIR)\mutex.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\ProtocolRegistryItem.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\ProtocolRegistryItem.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\ProtocolRegistryItem.obj"	"$(INTDIR)\ProtocolRegistryItem.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF 
+
+SOURCE=.\Registry.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\Registry.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\Registry.obj"	"$(INTDIR)\Registry.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF 
+
+SOURCE=.\RegistryImpl.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\RegistryImpl.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\RegistryImpl.obj"	"$(INTDIR)\RegistryImpl.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF 
+
+SOURCE=..\Common\Source\ServerClient.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\ServerClient.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\ServerClient.obj"	"$(INTDIR)\ServerClient.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\ServerManager.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\ServerManager.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\ServerManager.obj"	"$(INTDIR)\ServerManager.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF 
+
+SOURCE=..\Common\Source\shareddata.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\shareddata.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\shareddata.obj"	"$(INTDIR)\shareddata.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\StdAfx.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+CPP_SWITCHES=/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"$(INTDIR)\TCFServer.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 
+
+"$(INTDIR)\StdAfx.obj"	"$(INTDIR)\TCFServer.pch" : $(SOURCE) "$(INTDIR)"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+CPP_SWITCHES=/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR"$(INTDIR)\\" /Fp"$(INTDIR)\TCFServer.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /GZ /c 
+
+"$(INTDIR)\StdAfx.obj"	"$(INTDIR)\StdAfx.sbr"	"$(INTDIR)\TCFServer.pch" : $(SOURCE) "$(INTDIR)"
+	$(CPP) @<<
+  $(CPP_SWITCHES) $(SOURCE)
+<<
+
+
+!ENDIF 
+
+SOURCE=..\Common\Source\TCDebugLog.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\TCDebugLog.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\TCDebugLog.obj"	"$(INTDIR)\TCDebugLog.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+	$(CPP) $(CPP_PROJ) $(SOURCE)
+
+
+!ENDIF 
+
+SOURCE=.\TCFServer.cpp
+
+!IF  "$(CFG)" == "TCFServer - Win32 Release"
+
+
+"$(INTDIR)\TCFServer.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ELSEIF  "$(CFG)" == "TCFServer - Win32 Debug"
+
+
+"$(INTDIR)\TCFServer.obj"	"$(INTDIR)\TCFServer.sbr" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\TCFServer.pch"
+
+
+!ENDIF 
+
+SOURCE=.\resource.rc
+
+"$(INTDIR)\resource.res" : $(SOURCE) "$(INTDIR)"
+	$(RSC) $(RSC_PROJ) $(SOURCE)
+
+
+
+!ENDIF 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/TCFServer.plg	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,811 @@
+<html>
+<body>
+<pre>
+<h1>Build Log</h1>
+<h3>
+--------------------Configuration: TCFClient - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating command line "rc.exe /l 0x409 /fo"Release/resource.res" /d "NDEBUG" "C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\resource.rc"" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP331.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"Release/TCFClient.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\ClientManager.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\ErrorMonitorData.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\InputStream.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\ServerClient.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\shareddata.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\TCAPIConnectionJni.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\TCFClient.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\TCFCppApi.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP331.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP332.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /Fp"Release/TCFClient.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP332.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP333.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib shlwapi.lib /nologo /dll /incremental:no /pdb:"Release/TCFClient.pdb" /map:"Release/TCFClient.map" /machine:I386 /out:"Release/TCFClient.dll" /implib:"Release/TCFClient.lib" 
+.\Release\ClientManager.obj
+.\Release\ErrorMonitorData.obj
+.\Release\InputStream.obj
+.\Release\mutex.obj
+.\Release\ServerClient.obj
+.\Release\shareddata.obj
+.\Release\StdAfx.obj
+.\Release\TCAPIConnectionJni.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFClient.obj
+.\Release\TCFCppApi.obj
+.\Release\resource.res
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP333.tmp"
+<h3>Output Window</h3>
+Compiling resources...
+Compiling...
+StdAfx.cpp
+Compiling...
+ClientManager.cpp
+ErrorMonitorData.cpp
+InputStream.cpp
+mutex.cpp
+ServerClient.cpp
+shareddata.cpp
+TCAPIConnectionJni.cpp
+TCDebugLog.cpp
+TCFClient.cpp
+TCFCppApi.cpp
+Generating Code...
+Linking...
+   Creating library Release/TCFClient.lib and object Release/TCFClient.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP337.bat" with contents
+[
+@echo off
+copybinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP337.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFClient.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFClient - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating command line "rc.exe /l 0x409 /fo"Debug/resource.res" /d "_DEBUG" "C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\resource.rc"" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP338.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"Debug/" /Fp"Debug/TCFClient.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\ClientManager.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\ErrorMonitorData.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\InputStream.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\ServerClient.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\shareddata.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\TCAPIConnectionJni.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\TCFClient.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\TCFCppApi.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP338.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP339.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I ".\jdk1.5.0_10\include" /I ".\jdk1.5.0_10\include\win32" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCLIENT_EXPORTS" /FR"Debug/" /Fp"Debug/TCFClient.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFClient\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP339.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP33A.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib shlwapi.lib /nologo /dll /incremental:yes /pdb:"Debug/TCFClient.pdb" /map:"Debug/TCFClient.map" /debug /machine:I386 /out:"Debug/TCFClient.dll" /implib:"Debug/TCFClient.lib" /pdbtype:sept 
+.\Debug\ClientManager.obj
+.\Debug\ErrorMonitorData.obj
+.\Debug\InputStream.obj
+.\Debug\mutex.obj
+.\Debug\ServerClient.obj
+.\Debug\shareddata.obj
+.\Debug\StdAfx.obj
+.\Debug\TCAPIConnectionJni.obj
+.\Debug\TCDebugLog.obj
+.\Debug\TCFClient.obj
+.\Debug\TCFCppApi.obj
+.\Debug\resource.res
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP33A.tmp"
+<h3>Output Window</h3>
+Compiling resources...
+Compiling...
+StdAfx.cpp
+Compiling...
+ClientManager.cpp
+ErrorMonitorData.cpp
+InputStream.cpp
+mutex.cpp
+ServerClient.cpp
+shareddata.cpp
+TCAPIConnectionJni.cpp
+TCDebugLog.cpp
+TCFClient.cpp
+TCFCppApi.cpp
+Generating Code...
+Linking...
+   Creating library Debug/TCFClient.lib and object Debug/TCFClient.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP33E.bat" with contents
+[
+@echo off
+copybinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP33E.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFClient.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommSerial - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP33F.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"Release/TCFCommSerial.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommSerial\RealSerialComm.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommSerial\TCFCommSerial.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP33F.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP340.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"Release/TCFCommSerial.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommSerial\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP340.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP341.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /pdb:"Release/TCFCommSerial.pdb" /map:"Release/TCFCommSerial.map" /machine:I386 /out:"Release/TCFCommSerial.dll" /implib:"Release/TCFCommSerial.lib" 
+.\Release\BaseCom.obj
+.\Release\mutex.obj
+.\Release\RealSerialComm.obj
+.\Release\StdAfx.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFCommSerial.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP341.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+RealSerialComm.cpp
+TCDebugLog.cpp
+TCFCommSerial.cpp
+Generating Code...
+Linking...
+   Creating library Release/TCFCommSerial.lib and object Release/TCFCommSerial.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP345.bat" with contents
+[
+@echo off
+copyBinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP345.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommSerial.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommSerial - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP346.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"Debug/TCFCommSerial.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommSerial\RealSerialComm.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommSerial\TCFCommSerial.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP346.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP347.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMSERIAL_EXPORTS" /Fp"Debug/TCFCommSerial.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommSerial\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP347.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP348.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"Debug/TCFCommSerial.pdb" /map:"Debug/TCFCommSerial.map" /debug /machine:I386 /out:"Debug/TCFCommSerial.dll" /implib:"Debug/TCFCommSerial.lib" /pdbtype:sept 
+.\Debug\BaseCom.obj
+.\Debug\mutex.obj
+.\Debug\RealSerialComm.obj
+.\Debug\StdAfx.obj
+.\Debug\TCDebugLog.obj
+.\Debug\TCFCommSerial.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP348.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+RealSerialComm.cpp
+TCDebugLog.cpp
+TCFCommSerial.cpp
+Generating Code...
+Linking...
+   Creating library Debug/TCFCommSerial.lib and object Debug/TCFCommSerial.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP34C.bat" with contents
+[
+@echo off
+copyBinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP34C.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommSerial.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommTCP - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP34D.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /Fp"Release/TCFCommTCP.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommTCP\TCFCommTCP.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommTCP\TcpComm.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP34D.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP34E.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /Fp"Release/TCFCommTCP.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommTCP\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP34E.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP34F.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib shlwapi.lib /nologo /dll /incremental:no /pdb:"Release/TCFCommTCP.pdb" /map:"Release/TCFCommTCP.map" /machine:I386 /out:"Release/TCFCommTCP.dll" /implib:"Release/TCFCommTCP.lib" 
+.\Release\BaseCom.obj
+.\Release\mutex.obj
+.\Release\StdAfx.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFCommTCP.obj
+.\Release\TcpComm.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP34F.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+TCDebugLog.cpp
+TCFCommTCP.cpp
+TcpComm.cpp
+Generating Code...
+Linking...
+   Creating library Release/TCFCommTCP.lib and object Release/TCFCommTCP.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP353.bat" with contents
+[
+@echo off
+copybinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP353.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommTCP.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommTCP - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP354.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /FR"Debug/" /Fp"Debug/TCFCommTCP.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommTCP\TCFCommTCP.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommTCP\TcpComm.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP354.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP355.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /I "..\Common\Headers" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMTCP_EXPORTS" /FR"Debug/" /Fp"Debug/TCFCommTCP.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommTCP\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP355.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP356.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib shlwapi.lib /nologo /dll /incremental:yes /pdb:"Debug/TCFCommTCP.pdb" /map:"Debug/TCFCommTCP.map" /debug /machine:I386 /out:"Debug/TCFCommTCP.dll" /implib:"Debug/TCFCommTCP.lib" /pdbtype:sept 
+.\Debug\BaseCom.obj
+.\Debug\mutex.obj
+.\Debug\StdAfx.obj
+.\Debug\TCDebugLog.obj
+.\Debug\TCFCommTCP.obj
+.\Debug\TcpComm.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP356.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+TCDebugLog.cpp
+TCFCommTCP.cpp
+TcpComm.cpp
+Generating Code...
+Linking...
+   Creating library Debug/TCFCommTCP.lib and object Debug/TCFCommTCP.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP35A.bat" with contents
+[
+@echo off
+copybinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP35A.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommTCP.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommVirtualSerial - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP35B.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"Release/TCFCommVirtualSerial.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommSerial\RealSerialComm.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\TCFCommVirtualSerial.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\VirtualSerialComm.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP35B.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP35C.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"Release/TCFCommVirtualSerial.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP35C.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP35D.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /pdb:"Release/TCFCommVirtualSerial.pdb" /map:"Release/TCFCommVirtualSerial.map" /machine:I386 /out:"Release/TCFCommVirtualSerial.dll" /implib:"Release/TCFCommVirtualSerial.lib" 
+.\Release\BaseCom.obj
+.\Release\mutex.obj
+.\Release\RealSerialComm.obj
+.\Release\StdAfx.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFCommVirtualSerial.obj
+.\Release\VirtualSerialComm.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP35D.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+RealSerialComm.cpp
+TCDebugLog.cpp
+TCFCommVirtualSerial.cpp
+VirtualSerialComm.cpp
+Generating Code...
+Linking...
+   Creating library Release/TCFCommVirtualSerial.lib and object Release/TCFCommVirtualSerial.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP361.bat" with contents
+[
+@echo off
+copyBinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP361.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommVirtualSerial.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFCommVirtualSerial - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP362.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"Debug/TCFCommVirtualSerial.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\BaseCom.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommSerial\RealSerialComm.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\TCFCommVirtualSerial.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\VirtualSerialComm.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP362.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP363.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFCommSerial" /I "..\Common\Headers" /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFCOMMVIRTUALSERIAL_EXPORTS" /Fp"Debug/TCFCommVirtualSerial.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFCommVirtualSerial\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP363.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP364.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"Debug/TCFCommVirtualSerial.pdb" /map:"Debug/TCFCommVirtualSerial.map" /debug /machine:I386 /out:"Debug/TCFCommVirtualSerial.dll" /implib:"Debug/TCFCommVirtualSerial.lib" /pdbtype:sept 
+.\Debug\BaseCom.obj
+.\Debug\mutex.obj
+.\Debug\RealSerialComm.obj
+.\Debug\StdAfx.obj
+.\Debug\TCDebugLog.obj
+.\Debug\TCFCommVirtualSerial.obj
+.\Debug\VirtualSerialComm.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP364.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseCom.cpp
+mutex.cpp
+RealSerialComm.cpp
+TCDebugLog.cpp
+TCFCommVirtualSerial.cpp
+VirtualSerialComm.cpp
+Generating Code...
+Linking...
+   Creating library Debug/TCFCommVirtualSerial.lib and object Debug/TCFCommVirtualSerial.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP368.bat" with contents
+[
+@echo off
+copyBinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP368.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFCommVirtualSerial.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFProtOST - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP369.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"Release/TCFProtOST.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\BaseProtocol.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFProtOST\OSTProtocol.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFProtOST\TCFProtOST.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP369.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP36A.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\TCFServer" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"Release/TCFProtOST.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFProtOST\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP36A.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP36B.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:no /pdb:"Release/TCFProtOST.pdb" /map:"Release/TCFProtOST.map" /machine:I386 /out:"Release/TCFProtOST.dll" /implib:"Release/TCFProtOST.lib" 
+.\Release\BaseProtocol.obj
+.\Release\OSTProtocol.obj
+.\Release\StdAfx.obj
+.\Release\TCFProtOST.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP36B.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseProtocol.cpp
+OSTProtocol.cpp
+TCFProtOST.cpp
+Generating Code...
+Linking...
+   Creating library Release/TCFProtOST.lib and object Release/TCFProtOST.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP36F.bat" with contents
+[
+@echo off
+copyBinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP36F.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFProtOST.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFProtOST - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP370.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"Debug/TCFProtOST.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\BaseProtocol.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFProtOST\OSTProtocol.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFProtOST\TCFProtOST.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP370.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP371.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\TCFServer" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "TCFPROTOST_EXPORTS" /Fp"Debug/TCFProtOST.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFProtOST\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP371.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP372.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /incremental:yes /pdb:"Debug/TCFProtOST.pdb" /map:"Debug/TCFProtOST.map" /debug /machine:I386 /out:"Debug/TCFProtOST.dll" /implib:"Debug/TCFProtOST.lib" /pdbtype:sept 
+.\Debug\BaseProtocol.obj
+.\Debug\OSTProtocol.obj
+.\Debug\StdAfx.obj
+.\Debug\TCFProtOST.obj
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP372.tmp"
+<h3>Output Window</h3>
+Compiling...
+StdAfx.cpp
+Compiling...
+BaseProtocol.cpp
+OSTProtocol.cpp
+TCFProtOST.cpp
+Generating Code...
+Linking...
+   Creating library Debug/TCFProtOST.lib and object Debug/TCFProtOST.exp
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP377.bat" with contents
+[
+@echo off
+copyBinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP377.bat"
+copy libs
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+        1 file(s) copied.
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFProtOST.dll - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFServer - Win32 Release--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating command line "rc.exe /l 0x409 /fo"Release/resource.res" /d "NDEBUG" "C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\resource.rc"" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP378.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Release/TCFServer.pch" /Yu"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\Client.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\CommRegistryItem.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\Connection.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\ConnectionImpl.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\ErrorMonitorData.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\InputStream.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\MessageFile.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\ProtocolRegistryItem.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\Registry.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\RegistryImpl.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\ServerClient.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\ServerManager.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\shareddata.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\TCFServer.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP378.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP379.tmp" with contents
+[
+/nologo /Zp2 /MT /W3 /GX /O2 /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Release/TCFServer.pch" /Yc"stdafx.h" /Fo"Release/" /Fd"Release/" /FD /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP379.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37A.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib shlwapi.lib /nologo /subsystem:console /incremental:no /pdb:"Release/TCFServer.pdb" /machine:I386 /out:"Release/TCFServer.exe" 
+.\Release\Client.obj
+.\Release\CommRegistryItem.obj
+.\Release\Connection.obj
+.\Release\ConnectionImpl.obj
+.\Release\ErrorMonitorData.obj
+.\Release\InputStream.obj
+.\Release\MessageFile.obj
+.\Release\mutex.obj
+.\Release\ProtocolRegistryItem.obj
+.\Release\Registry.obj
+.\Release\RegistryImpl.obj
+.\Release\ServerClient.obj
+.\Release\ServerManager.obj
+.\Release\shareddata.obj
+.\Release\StdAfx.obj
+.\Release\TCDebugLog.obj
+.\Release\TCFServer.obj
+.\Release\resource.res
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37A.tmp"
+<h3>Output Window</h3>
+Compiling resources...
+Compiling...
+StdAfx.cpp
+Compiling...
+Client.cpp
+CommRegistryItem.cpp
+Connection.cpp
+ConnectionImpl.cpp
+ErrorMonitorData.cpp
+InputStream.cpp
+MessageFile.cpp
+mutex.cpp
+ProtocolRegistryItem.cpp
+Registry.cpp
+RegistryImpl.cpp
+ServerClient.cpp
+ServerManager.cpp
+shareddata.cpp
+TCDebugLog.cpp
+TCFServer.cpp
+Generating Code...
+Linking...
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37C.bat" with contents
+[
+@echo off
+copybinaries Release
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37C.bat"
+copy binary
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFServer.exe - 0 error(s), 0 warning(s)
+<h3>
+--------------------Configuration: TCFServer - Win32 Debug--------------------
+</h3>
+<h3>Command Lines</h3>
+Creating command line "rc.exe /l 0x409 /fo"Debug/resource.res" /d "_DEBUG" "C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\resource.rc"" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37D.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR"Debug/" /Fp"Debug/TCFServer.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\Client.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\CommRegistryItem.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\Connection.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\ConnectionImpl.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\ErrorMonitorData.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\InputStream.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\MessageFile.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\mutex.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\ProtocolRegistryItem.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\Registry.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\RegistryImpl.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\ServerClient.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\ServerManager.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\shareddata.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\Common\Source\TCDebugLog.cpp"
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\TCFServer.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37D.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37E.tmp" with contents
+[
+/nologo /Zp2 /MTd /W3 /Gm /GX /ZI /Od /I "..\Common\Headers" /I "..\Common\Source" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR"Debug/" /Fp"Debug/TCFServer.pch" /Yc"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
+"C:\dev2.1hgworkspace\carbidecpp\connectivity\com.nokia.tcf\native\TCFNative\TCFServer\StdAfx.cpp"
+]
+Creating command line "cl.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37E.tmp" 
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37F.tmp" with contents
+[
+kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ws2_32.lib shlwapi.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/TCFServer.pdb" /debug /machine:I386 /out:"Debug/TCFServer.exe" /pdbtype:sept 
+.\Debug\Client.obj
+.\Debug\CommRegistryItem.obj
+.\Debug\Connection.obj
+.\Debug\ConnectionImpl.obj
+.\Debug\ErrorMonitorData.obj
+.\Debug\InputStream.obj
+.\Debug\MessageFile.obj
+.\Debug\mutex.obj
+.\Debug\ProtocolRegistryItem.obj
+.\Debug\Registry.obj
+.\Debug\RegistryImpl.obj
+.\Debug\ServerClient.obj
+.\Debug\ServerManager.obj
+.\Debug\shareddata.obj
+.\Debug\StdAfx.obj
+.\Debug\TCDebugLog.obj
+.\Debug\TCFServer.obj
+.\Debug\resource.res
+]
+Creating command line "link.exe @C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP37F.tmp"
+<h3>Output Window</h3>
+Compiling resources...
+Compiling...
+StdAfx.cpp
+Compiling...
+Client.cpp
+CommRegistryItem.cpp
+Connection.cpp
+ConnectionImpl.cpp
+ErrorMonitorData.cpp
+InputStream.cpp
+MessageFile.cpp
+mutex.cpp
+ProtocolRegistryItem.cpp
+Registry.cpp
+RegistryImpl.cpp
+ServerClient.cpp
+ServerManager.cpp
+shareddata.cpp
+TCDebugLog.cpp
+TCFServer.cpp
+Generating Code...
+Linking...
+Creating temporary file "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP381.bat" with contents
+[
+@echo off
+copybinaries Debug
+]
+Creating command line "C:\DOCUME~1\chpeckha\LOCALS~1\Temp\RSP381.bat"
+copy binary
+Copy binaries to ..\..\..\os\win32\x86
+        1 file(s) copied.
+
+
+
+<h3>Results</h3>
+TCFServer.exe - 0 error(s), 0 warning(s)
+</pre>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/copyBinaries.cmd	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,3 @@
+echo off
+echo Copy binaries to ..\..\..\os\win32\x86
+copy /V %1\TCFServer.exe ..\..\..\os\win32\x86
Binary file connectivity/com.nokia.tcf/native/TCFNative/TCFServer/resource.aps has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/resource.h	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+//{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by resource.rc
+//
+#define IDS_VERSION                     1
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        102
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1000
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivity/com.nokia.tcf/native/TCFNative/TCFServer/resource.rc	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,120 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifndef _MAC
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION 2,0,0,0
+ PRODUCTVERSION 2,0,0,0
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x40004L
+ FILETYPE 0x1L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "Comments", "\0"
+            VALUE "CompanyName", "Nokia\0"
+            VALUE "FileDescription", "Target Communication Framework Server\0"
+            VALUE "FileVersion", "2, 0, 0, 0\0"
+            VALUE "InternalName", "TCFServer\0"
+            VALUE "LegalCopyright", "Copyright © 2008\0"
+            VALUE "LegalTrademarks", "\0"
+            VALUE "OriginalFilename", "TCFServer.exe\0"
+            VALUE "PrivateBuild", "\0"
+            VALUE "ProductName", "Nokia TCFServer\0"
+            VALUE "ProductVersion", "2, 0, 0, 0\0"
+            VALUE "SpecialBuild", "\0"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+#endif    // !_MAC
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// String Table
+//
+
+STRINGTABLE DISCARDABLE 
+BEGIN
+    IDS_VERSION             "2.0.0.0"
+END
+
+#endif    // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
--- a/connectivity/com.nokia.tcf/src/com/nokia/tcf/api/ITCConnection.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/connectivity/com.nokia.tcf/src/com/nokia/tcf/api/ITCConnection.java	Mon Apr 27 15:07:35 2009 -0500
@@ -29,14 +29,6 @@
 public interface ITCConnection {
 	
 	/**
-	 * Connection types
-	 */
-	public final int MEDIA_REALTCP = 2;
-	public final int MEDIA_REALSERIAL = 3;
-	public final int MEDIA_VIRTUALSERIAL = 4;
-	public final int MEDIA_USB = 5;
-
-	/**
 	 * Default retry interval and retry timeout (in seconds)
 	 */
 	public final long DEFAULT_COMM_ERROR_RETRY_INTERVAL = 1; // 1 second
@@ -51,7 +43,7 @@
 	 * Return connection type
 	 * @return
 	 */
-	public int getConnectionType();
+	public String getConnectionType();
 	/**
 	 * Get the current retry interval in seconds
 	 * @return
@@ -67,7 +59,7 @@
 	 * @param inConnectionType
 	 * @return IStatus
 	 */
-	public IStatus setConnectionType(int inConnectionType);
+	public IStatus setConnectionType(String inConnectionType);
 	
 	/**
 	 * Set the retry interval after a comm error in seconds. The default is 1 second. 
--- a/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCAPIConnection.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCAPIConnection.java	Mon Apr 27 15:07:35 2009 -0500
@@ -19,34 +19,15 @@
  */
 package com.nokia.tcf.impl;
 
+import com.nokia.tcf.Activator;
+import com.nokia.tcf.api.*;
+
+import org.eclipse.core.runtime.*;
+
 import java.io.File;
 import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
 import java.text.MessageFormat;
 
-import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Path;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.osgi.service.datalocation.Location;
-
-import com.nokia.tcf.api.ITCAPIConnection;
-import com.nokia.tcf.api.ITCConnection;
-import com.nokia.tcf.api.ITCErrorListener;
-import com.nokia.tcf.api.ITCMessage;
-import com.nokia.tcf.api.ITCRealSerialConnection;
-import com.nokia.tcf.api.ITCRealTCPConnection;
-import com.nokia.tcf.api.ITCVirtualSerialConnection;
-import com.nokia.tcf.api.TCFClassFactory;
-import com.nokia.tcf.api.ITCMessageIds;
-import com.nokia.tcf.api.ITCMessageInputStream;
-import com.nokia.tcf.api.ITCMessageOptions;
-import com.nokia.tcf.api.ITCVersion;
-import com.nokia.tcf.Activator;
-import com.nokia.tcf.api.TCErrorConstants;
-
 public class TCAPIConnection implements ITCAPIConnection {
 
 	static {
@@ -70,11 +51,11 @@
 		}
 	}
 	private TCErrorListenerList<ITCErrorListener> errorListenerList;
-	private ITCCookie cookie;		// this client's handle to native
-	private ITCMessageIds messageIds; // this client's message ids
-	private TCMessageInputStream inputStream; // this client's message input stream (not using message file)
+	protected ITCCookie cookie;		// this client's handle to native
+	protected ITCMessageIds messageIds; // this client's message ids
+	protected TCMessageInputStream inputStream; // this client's message input stream (not using message file)
 	protected ITCMessageOptions messageOptions; // this client's message options
-	private TCFMonitorThread monitorThread; // the client's native monitor
+	protected TCFMonitorThread monitorThread; // the client's native monitor
 	public boolean stopTCFMonitorThread;	//  stream monitor start/stop flag
 	protected IStatus statusOK;
 	protected ITCConnection connection; // the client's connection
@@ -132,15 +113,15 @@
 	}
 	protected IStatus checkConnectionType(ITCConnection inConnection) {
 		IStatus status = statusOK;
-		int type = inConnection.getConnectionType();
-		if (type == ITCConnection.MEDIA_VIRTUALSERIAL) {
+		String type = inConnection.getConnectionType();
+		if (type.compareToIgnoreCase("virtualserial") == 0) {
 			ITCVirtualSerialConnection c = (ITCVirtualSerialConnection)inConnection;
 			String p = c.getComPort();
 			if (p == null) {
 				status = new Status(Status.ERROR, Activator.PLUGIN_ID, (int)TCErrorConstants.TCAPI_ERR_MISSING_MEDIA_DATA, 
 						TCErrorConstants.getErrorMessage(TCErrorConstants.TCAPI_ERR_MISSING_MEDIA_DATA), null);
 			}
-		} else if (type == ITCConnection.MEDIA_REALTCP) {
+		} else if (type.compareToIgnoreCase("tcp") == 0) {
 			ITCRealTCPConnection c = (ITCRealTCPConnection)inConnection;
 			String ip = c.getIpAddress();
 			String p = c.getPort();
@@ -148,7 +129,7 @@
 				status = new Status(Status.ERROR, Activator.PLUGIN_ID, (int)TCErrorConstants.TCAPI_ERR_MISSING_MEDIA_DATA, 
 						TCErrorConstants.getErrorMessage(TCErrorConstants.TCAPI_ERR_MISSING_MEDIA_DATA), null);
 			}
-		} else if (type == ITCConnection.MEDIA_REALSERIAL) {
+		} else if (type.compareToIgnoreCase("serial") == 0) {
 			ITCRealSerialConnection c = (ITCRealSerialConnection)inConnection;
 			long err = checkRealSerialSettings(c);
 			if (err != TCErrorConstants.TCAPI_ERR_NONE) {
@@ -339,7 +320,7 @@
 		}
 		return status;
 	}
-	protected IStatus finishConnect(int type, String[] settings, 
+	protected IStatus finishConnect(String type, String[] settings, 
 			ITCConnection inConnection, ITCMessageOptions inMessageOptions, ITCMessageIds inMessageIds) {
 		IStatus status = statusOK;
 		// connect
@@ -467,29 +448,24 @@
 		
 		IStatus status = checkConnectOptions(inConnection, inMessageOptions, inMessageIds);
 		String[] settings = null;
-		int type = 0;
+		String type = null;
 
 		// do connect
 		if (status.isOK()) {
 			settings = null;
 			type = inConnection.getConnectionType();
-			switch(type) {
-			case ITCConnection.MEDIA_REALTCP: {
+			if (type.compareToIgnoreCase("tcp") == 0) {
 				settings = new String[3];
 				ITCRealTCPConnection t = (ITCRealTCPConnection)inConnection;
 				settings[0] = t.getIpAddress();
 				settings[1] = t.getPort();
 				settings[2] = t.getDecodeFormat().toLowerCase();
-				break;
-			}
-			case ITCConnection.MEDIA_VIRTUALSERIAL: {
+			} else if (type.compareToIgnoreCase("virtualserial") == 0) {
 				settings = new String[2];
 				ITCVirtualSerialConnection s = (ITCVirtualSerialConnection)inConnection;
 				settings[0] = s.getComPort();
 				settings[1] = s.getDecodeFormat().toLowerCase();
-				break;
-			}
-			case ITCConnection.MEDIA_REALSERIAL: {
+			} else if (type.compareToIgnoreCase("serial") == 0) {
 				settings = new String[7];
 				ITCRealSerialConnection s = (ITCRealSerialConnection)inConnection;
 				settings[0] = s.getComPort();
@@ -499,20 +475,15 @@
 				settings[4] = s.getStopBits();
 				settings[5] = s.getFlowControl();
 				settings[6] = s.getDecodeFormat().toLowerCase();
-				break;
-			}
-			case ITCConnection.MEDIA_USB: {
+			} else if (type.compareToIgnoreCase("usb") == 0) {
 				settings = new String[1];
-				break;
-			}
-			default:
-				// Add other connection types here - error already checked in checkConnection()
-				break;
+			} else {
+				// Add other connections here
 			}
 		}
 		return finishConnect(type, settings, inConnection, inMessageOptions, inMessageIds);
 	}
-	private void ensureWritableFile(String filePath) throws IOException {
+	protected void ensureWritableFile(String filePath) throws IOException {
 		// ensure file path points to a writable regular file
 		IPath path = new Path(filePath);
 		File file = path.toFile();
@@ -628,32 +599,11 @@
 			connections = new ITCConnection[(int)numberConnections];
 			for (int inIndex = 0; inIndex < numberConnections; inIndex++)
 			{
-				int[] type = new int[1];
+				String[] type = new String[1];
 				ret = nativeGetTypeOfConnection(inIndex, type);
-				switch ((int)type[0]) {
-				case (int)ITCConnection.MEDIA_VIRTUALSERIAL: {
+				if (type[0].compareToIgnoreCase("virtualserial") == 0) {
 					ITCVirtualSerialConnection outConnection = (ITCVirtualSerialConnection)TCFClassFactory.createITCVirtualSerialConnection(null);
-					int[] outType = new int[1];
-					long[] outOptions = new long[3];
-					String[] outSettings = new String[1];
-					ret = nativeGetConnectionSettings(inIndex, outType, outOptions, outSettings);
-					if (ret == TCErrorConstants.TCAPI_ERR_NONE) {
-						outConnection.setConnectionType(outType[0]);
-						outConnection.setRetryInterval(outOptions[0]);
-						outConnection.setRetryTimeout(outOptions[1]);
-						outConnection.setDecodeFormat(convertDecodeFormat(outOptions[2]));
-						outConnection.setComPort(outSettings[0]);
-						
-						connections[inIndex] = outConnection;
-					} else {
-						// error processing from nativeGetConnectionSettings
-						status = new Status(Status.ERROR,Activator.PLUGIN_ID, (int)ret, TCErrorConstants.getErrorMessage(ret), null);
-					}
-					break;
-				}
-				case (int)ITCConnection.MEDIA_REALTCP: {
-					ITCRealTCPConnection outConnection = (ITCRealTCPConnection)TCFClassFactory.createITCRealTCPConnection(null, null);
-					int[] outType = new int[1];
+					String[] outType = new String[1];
 					long[] outOptions = new long[3];
 					String[] outSettings = new String[2];
 					ret = nativeGetConnectionSettings(inIndex, outType, outOptions, outSettings);
@@ -661,66 +611,66 @@
 						outConnection.setConnectionType(outType[0]);
 						outConnection.setRetryInterval(outOptions[0]);
 						outConnection.setRetryTimeout(outOptions[1]);
-						outConnection.setDecodeFormat(convertDecodeFormat(outOptions[2]));
-						outConnection.setIpAddress(outSettings[0]);
-						outConnection.setPort(outSettings[1]);
+						outConnection.setComPort(outSettings[0]);
+						outConnection.setDecodeFormat(outSettings[1]);
 						
 						connections[inIndex] = outConnection;
 					} else {
 						// error processing from nativeGetConnectionSettings
 						status = new Status(Status.ERROR,Activator.PLUGIN_ID, (int)ret, TCErrorConstants.getErrorMessage(ret), null);
 					}
-					break;
-				}
-				case (int)ITCConnection.MEDIA_REALSERIAL: {
+				} else if (type[0].compareToIgnoreCase("serial") == 0) {
 					ITCRealSerialConnection outConnection = (ITCRealSerialConnection)TCFClassFactory.createITCRealSerialConnection(null);
-					int[] outType = new int[1];
+					String[] outType = new String[1];
 					long[] outOptions = new long[6];
-					String[] outSettings = new String[6];
+					String[] outSettings = new String[7];
 					ret = nativeGetConnectionSettings(inIndex, outType, outOptions, outSettings);
 					if (ret == TCErrorConstants.TCAPI_ERR_NONE) {
 						outConnection.setConnectionType(outType[0]);
 						outConnection.setRetryInterval(outOptions[0]);
 						outConnection.setRetryTimeout(outOptions[1]);
-						outConnection.setDecodeFormat(convertDecodeFormat(outOptions[2]));
 						outConnection.setComPort(outSettings[0]);
 						outConnection.setBaudRate(outSettings[1]);
 						outConnection.setDataBits(outSettings[2]);
 						outConnection.setParity(outSettings[3]);
 						outConnection.setStopBits(outSettings[4]);
 						outConnection.setFlowControl(outSettings[5]);
+						outConnection.setDecodeFormat(outSettings[6]);
 						
 						connections[inIndex] = outConnection;
 					} else {
 						// error processing from nativeGetConnectionSettings
 						status = new Status(Status.ERROR,Activator.PLUGIN_ID, (int)ret, TCErrorConstants.getErrorMessage(ret), null);
 					}
-					break;
-				}
-				case (int)ITCConnection.MEDIA_USB: {
-					break;
-				}
-				default:
+				} else if (type[0].compareToIgnoreCase("tcp") == 0) {
+					ITCRealTCPConnection outConnection = (ITCRealTCPConnection)TCFClassFactory.createITCRealTCPConnection(null, null);
+					String[] outType = new String[1];
+					long[] outOptions = new long[3];
+					String[] outSettings = new String[3];
+					ret = nativeGetConnectionSettings(inIndex, outType, outOptions, outSettings);
+					if (ret == TCErrorConstants.TCAPI_ERR_NONE) {
+						outConnection.setConnectionType(outType[0]);
+						outConnection.setRetryInterval(outOptions[0]);
+						outConnection.setRetryTimeout(outOptions[1]);
+						outConnection.setIpAddress(outSettings[0]);
+						outConnection.setPort(outSettings[1]);
+						outConnection.setDecodeFormat(outSettings[2]);
+						
+						connections[inIndex] = outConnection;
+					} else {
+						// error processing from nativeGetConnectionSettings
+						status = new Status(Status.ERROR,Activator.PLUGIN_ID, (int)ret, TCErrorConstants.getErrorMessage(ret), null);
+					}
+				} else if (type[0].compareToIgnoreCase("usb") == 0) {
+					// Finish this sometime when real USB is used on PC
+				} else {
 					// Add other connection types here
-					break;
 				}
 			}
 		}
 		return connections;
 	}
 
-	protected String convertDecodeFormat(long decodeFormat) {
-		if (decodeFormat == 1) {
-			return "platsim";
-		}
-		if (decodeFormat == 2) {
-			return "ost";
-		}
-		if (decodeFormat == 3) {
-			return "rawtrk";
-		}
-		return "ost";
-	}
 	/* (non-Javadoc)
 	 * @see com.nokia.tcf.api.ITCAPIConnection#getInputStream()
 	 */
@@ -775,10 +725,10 @@
 
 					long[] formattingOptions = new long[5];
 					formattingOptions[0] = 0;
-					formattingOptions[1] = messageOptions.getMessageEncodeFormat();
-					formattingOptions[2] = messageOptions.getOSTVersion();
-					formattingOptions[3] = inMessage.getMyMessageId();
-					formattingOptions[4] = (inMessage.isUseMyMessageId() == true) ? 1 : 0;
+					formattingOptions[1] = messageOptions.getMessageEncodeFormat(); // add protocol or not
+					formattingOptions[2] = messageOptions.getOSTVersion();			// OST version byte to use if OST
+					formattingOptions[3] = inMessage.getMyMessageId();				// message ID to use of adding protocol
+					formattingOptions[4] = (inMessage.isUseMyMessageId() == true) ? 1 : 0; // use my ID or not
 					String[] settings = new String[1];
 					settings[0] = connection.getDecodeFormat().toLowerCase();
 					try {
@@ -895,7 +845,7 @@
 		}
 		return status;
 	}
-	protected IStatus doTestConnection(int type, String[] settings, ITCConnection inConnection) {
+	protected IStatus doTestConnection(String type, String[] settings, ITCConnection inConnection) {
 		IStatus status = statusOK;
 		// test connection
 		long[] options = new long[3];
@@ -914,10 +864,8 @@
 	public IStatus testConnection(ITCConnection inConnection) {
 		IStatus status = statusOK;
 		String[] settings = null;
-		int type = inConnection.getConnectionType();
-		switch(type) {
-		case ITCConnection.MEDIA_REALSERIAL:
-		{
+		String type = inConnection.getConnectionType();
+		if (type.compareToIgnoreCase("serial") == 0) {
 			settings = new String[7];
 			ITCRealSerialConnection s = (ITCRealSerialConnection)inConnection;
 			settings[0] = s.getComPort();
@@ -927,36 +875,25 @@
 			settings[4] = s.getStopBits();
 			settings[5] = s.getFlowControl();
 			settings[6] = s.getDecodeFormat().toLowerCase();
-		}
-			break;
-		case ITCConnection.MEDIA_REALTCP:
-		{
+		} else if (type.compareToIgnoreCase("tcp") == 0) {
 			settings = new String[3];
 			ITCRealTCPConnection s = (ITCRealTCPConnection)inConnection;
 			settings[0] = s.getIpAddress();
 			settings[1] = s.getPort();
 			settings[2] = s.getDecodeFormat().toLowerCase();
-		}	
-			break;
-		case ITCConnection.MEDIA_USB:
-		{
+		} else if (type.compareToIgnoreCase("usb") == 0) {
 			settings = new String[1];
-		}
-			break;
-		case ITCConnection.MEDIA_VIRTUALSERIAL:
-		{
+			// finish this sometime when real USB is used on PC
+		} else if (type.compareToIgnoreCase("virtualserial") == 0) {
 			settings = new String[2];
 			ITCVirtualSerialConnection s = (ITCVirtualSerialConnection)inConnection;
 			settings[0] = s.getComPort();
 			settings[1] = s.getDecodeFormat().toLowerCase();
-		}
-			break;
-		default:
+		} else {
+			// add new connections here
 			long err = TCErrorConstants.TCAPI_ERR_MEDIA_NOT_SUPPORTED;
 			status = new Status(Status.ERROR, Activator.PLUGIN_ID, (int)err, TCErrorConstants.getErrorMessage((int)err), null);
-			break;
 		}
-		
 		if (status.isOK()) {
 			status = doTestConnection(type, settings, inConnection);
 /*			// test connection
@@ -989,17 +926,17 @@
 
 	// natives
 	// connect/disconnect
-	private native long nativeConnect(int inType, long[] inOptions, String[] inSettings, long[] inMessageOptions, String inFilePath, long[] outClientId);
-	private native long nativeDisconnect(long inClientId); 
+	protected native long nativeConnect(String inType, long[] inOptions, String[] inSettings, long[] inMessageOptions, String inFilePath, long[] outClientId);
+	protected native long nativeDisconnect(long inClientId); 
 	// connections
 	protected native long nativeGetNumberConnections(long[] outNumber);
-	protected native long nativeGetTypeOfConnection(long inIndex, int[] outType);
-	protected native long nativeGetConnectionSettings(long inIndex, int[] outType, long[] outOptions, String[] outSettings);
+	protected native long nativeGetTypeOfConnection(long inIndex, String[] outType);
+	protected native long nativeGetConnectionSettings(long inIndex, String[] outType, long[] outOptions, String[] outSettings);
 	// port handling errors
 	public native boolean nativePollError(long inClienId, int[] outErrorCode, boolean[] outHasOSErrorCode, long[] outOSErrorCode);
 	// versions
-	private native long nativeGetNumberVersionEntities(long inClientId);
-	private native long nativeGetVersion(long inClientId, long inNumToGet, String[] outVersion);
+	protected native long nativeGetNumberVersionEntities(long inClientId);
+	protected native long nativeGetVersion(long inClientId, long inNumToGet, String[] outVersion);
 	// input stream
 	public native long nativePollInputStream(long inClientId, long[] outNumberTotalMessages);
 	public native long nativePollInputStream2(long inClientId, long inNumberMessagesToPeek, long[] outNumberMessagesPeeked, long[] outNumberBytesPeeked);
@@ -1008,17 +945,17 @@
 	public native long nativeOpenInputStream(long inClientId, String inBaseFilePath, long inInputStreamSize, boolean inOverFlowToFile);
 	public native long nativeCloseInputStream(long inClientId);
 	// message file
-	private native long nativeClearFile(long inClientId);
+	protected native long nativeClearFile(long inClientId);
 	// send message
-	private native long nativeSendMessage(long inClientId, long[] inFormattingOptions, String[] inSettings, byte[] inMessage);
+	protected native long nativeSendMessage(long inClientId, long[] inFormattingOptions, String[] inSettings, byte[] inMessage);
 	// register message IDs
-	private native long nativeSetMessageIds(long inClientId, byte[] inMessageIds);
+	protected native long nativeSetMessageIds(long inClientId, byte[] inMessageIds);
 	// start/stop processing
-	private native long nativeStart(long inClientId);
-	private native long nativeStop(long inClientId);
+	protected native long nativeStart(long inClientId);
+	protected native long nativeStop(long inClientId);
 	// test connections
-	private native long nativeTestConnection(int inType, long[] inOptions, String[] inSettings);
-	private native long nativeTestConnection(long inClientId);
+	protected native long nativeTestConnection(String inType, long[] inOptions, String[] inSettings);
+	protected native long nativeTestConnection(long inClientId);
 	// start/stop server - done from plugin activator start/stop methods
 	public native long nativeStartServer();
 	public native long nativeStopServer();
--- a/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCBaseConnection.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCBaseConnection.java	Mon Apr 27 15:07:35 2009 -0500
@@ -28,7 +28,7 @@
 
 public abstract class TCBaseConnection implements ITCConnection {
 
-	private int connectionType;
+	private String connectionType;
 	private long retryInterval;
 	private long retryTimeout;
 	protected String decodeFormat;
@@ -38,10 +38,10 @@
 	 * @param retryTimeout
 	 * @param decodeFormat
 	 */
-	public TCBaseConnection(int connectionType, long retryInterval,
+	public TCBaseConnection(String connectionType, long retryInterval,
 			long retryTimeout, String decodeFormat) {
 		super();
-		this.connectionType = connectionType;
+		this.connectionType = connectionType.toLowerCase();
 		this.retryInterval = retryInterval;
 		this.retryTimeout = retryTimeout;
 		this.decodeFormat = decodeFormat;
@@ -50,9 +50,9 @@
 	/**
 	 * @param connectionType
 	 */
-	public TCBaseConnection(int connectionType) {
+	public TCBaseConnection(String connectionType) {
 		super();
-		this.connectionType = connectionType;
+		this.connectionType = connectionType.toLowerCase();
 		this.retryInterval = DEFAULT_COMM_ERROR_RETRY_INTERVAL;
 		this.retryTimeout = DEFAULT_COMM_ERROR_RETRY_TIMEOUT;
 		this.decodeFormat = "ost";
@@ -63,10 +63,10 @@
 	 * @param retryInterval
 	 * @param retryTimeout
 	 */
-	public TCBaseConnection(int connectionType, long retryInterval,
+	public TCBaseConnection(String connectionType, long retryInterval,
 			long retryTimeout) {
 		super();
-		this.connectionType = connectionType;
+		this.connectionType = connectionType.toLowerCase();
 		this.retryInterval = retryInterval;
 		this.retryTimeout = retryTimeout;
 		this.decodeFormat = "ost";
@@ -80,7 +80,7 @@
 	/* (non-Javadoc)
 	 * @see com.nokia.tcf.api.ITCConnection#getConnectionType()
 	 */
-	public int getConnectionType() {
+	public String getConnectionType() {
 		return this.connectionType;
 	}
 
@@ -101,9 +101,9 @@
 	/* (non-Javadoc)
 	 * @see com.nokia.tcf.api.ITCConnection#setConnectionType(int)
 	 */
-	public IStatus setConnectionType(int inConnectionType) {
+	public IStatus setConnectionType(String inConnectionType) {
 		IStatus status = new Status(Status.OK, Activator.PLUGIN_ID, (int)TCErrorConstants.TCAPI_ERR_NONE, "OK", null);
-		connectionType = inConnectionType;
+		connectionType = inConnectionType.toLowerCase();
 		return status;
 	}
 
@@ -145,14 +145,7 @@
 	 */
 	public IStatus setDecodeFormat(String inDecodeFormat) {
 		IStatus status = new Status(Status.OK, Activator.PLUGIN_ID, (int)TCErrorConstants.TCAPI_ERR_NONE, "OK", null);
-		if ((inDecodeFormat.compareToIgnoreCase("platsim") == 0) ||
-				(inDecodeFormat.compareToIgnoreCase("ost") == 0) ||
-				(inDecodeFormat.compareToIgnoreCase("rawtrk") == 0)) {
-			decodeFormat = inDecodeFormat;
-		} else {
-			status  = new Status(Status.ERROR, Activator.PLUGIN_ID, (int)TCErrorConstants.TCAPI_ERR_INVALID_DECODE_FORMAT, "Error", null);
-			decodeFormat = "ost";
-		}
+		decodeFormat = inDecodeFormat;
 		return status;
 	}
 
--- a/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCRealSerialConnection.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCRealSerialConnection.java	Mon Apr 27 15:07:35 2009 -0500
@@ -42,7 +42,7 @@
 	 * All serial parameters are defaulted.
 	 */
 	public TCRealSerialConnection() {
-		super(MEDIA_REALSERIAL);
+		super("serial");
 		comPort = DEFAULT_COM_PORT;
 		baudRate = DEFAULT_BAUD;
 		parity = DEFAULT_PARITY;
@@ -59,7 +59,7 @@
 	 * @param inComPort
 	 */
 	public TCRealSerialConnection(String inComPort) {
-		super(MEDIA_REALSERIAL);
+		super("serial");
 		comPort = inComPort;
 		baudRate = DEFAULT_BAUD;
 		parity = DEFAULT_PARITY;
@@ -79,7 +79,7 @@
 	 */
 	public TCRealSerialConnection(String inComPort, long retryInterval,
 			long retryTimeout) {
-		super(MEDIA_REALSERIAL, retryInterval, retryTimeout);
+		super("serial", retryInterval, retryTimeout);
 		comPort = inComPort;
 		baudRate = DEFAULT_BAUD;
 		parity = DEFAULT_PARITY;
@@ -98,7 +98,7 @@
 	 * @param inBaudRate
 	 */
 	public TCRealSerialConnection(String inComPort, String inBaudRate) {
-		super(MEDIA_REALSERIAL);
+		super("serial");
 		comPort = inComPort;
 		baudRate = inBaudRate;
 		parity = DEFAULT_PARITY;
--- a/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCRealTCPConnection.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCRealTCPConnection.java	Mon Apr 27 15:07:35 2009 -0500
@@ -40,7 +40,7 @@
 	 * @param inIpPort
 	 */
 	public TCRealTCPConnection(String inIpAddress, String inPort) {
-		super(MEDIA_REALTCP);
+		super("tcp");
 		ipAddress = inIpAddress;
 		ipPort = inPort;
 		decodeFormat = "ost";
@@ -56,7 +56,7 @@
 	 * @param retryTimeout
 	 */
 	public TCRealTCPConnection(String inIpAddress, String inIpPort, long retryInterval, long retryTimeout) {
-		super(MEDIA_REALTCP, retryInterval, retryTimeout);
+		super("tcp", retryInterval, retryTimeout);
 		ipAddress = inIpAddress;
 		ipPort = inIpPort;
 		decodeFormat = "ost";
--- a/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCVirtualSerialConnection.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/connectivity/com.nokia.tcf/src/com/nokia/tcf/impl/TCVirtualSerialConnection.java	Mon Apr 27 15:07:35 2009 -0500
@@ -34,7 +34,7 @@
 	 *  Create Virtual Serial connection with default COM port. Retry periods are defaulted.
 	 */
 	public TCVirtualSerialConnection() {
-		super(MEDIA_VIRTUALSERIAL);
+		super("virtualserial");
 		this.comPort = ITCVirtualSerialConnection.DEFAULT_COM_PORT;
 		decodeFormat = "ost";
 	}
@@ -48,7 +48,7 @@
 	 */
 	public TCVirtualSerialConnection(long retryInterval,
 			long retryTimeout) {
-		super(MEDIA_VIRTUALSERIAL, retryInterval, retryTimeout);
+		super("virtualserial", retryInterval, retryTimeout);
 		this.comPort = ITCVirtualSerialConnection.DEFAULT_COM_PORT;
 		decodeFormat = "ost";
 	}
@@ -59,7 +59,7 @@
 	 * @param inPort
 	 */
 	public TCVirtualSerialConnection(String inPort) {
-		super(MEDIA_VIRTUALSERIAL);
+		super("virtualserial");
 		this.comPort = inPort;
 		decodeFormat = "ost";
 	}
Binary file core/carbide_releases/readme/background_carbide.jpg has changed
--- a/core/carbide_releases/readme/readme_sdks.html	Fri Apr 24 10:31:21 2009 -0500
+++ b/core/carbide_releases/readme/readme_sdks.html	Mon Apr 27 15:07:35 2009 -0500
@@ -6,22 +6,17 @@
 <title>SDK Support in Carbide.c++</title>
 <style type="text/css">
 <!--
-body { background-image: url(background_carbide.jpg);}
-.style1 {font-size: x-small}
-.style2 {font-family: "Courier New", Courier, mono}
-.style3 {color: #FF0000; font-weight: bold}
-.style4 {font-weight: bold}
-.style5 {color: #FFFFFF; }
+.style6 {font-weight: bold}
 -->
 </style>
 </head>
 
-<body >
+<body background="background_carbide.jpg">
 
 <h2>You're not done installing just yet... </h2>
-<p>Release: 2.0.4<br>
+<p>Release: 2.1.0<br>
   Revised:&nbsp;April 2009</p>
-<p>Read the <b>Release Notes</b> for the latest infomation about this product. In Carbide.c++ simply click  <b>Help &gt; Help Contents &gt; Carbide Help &gt; Carbide.c++ User Guide</b>.</p>
+<p>Read the <b>Release Notes</b> and <b>Bug Fixes</b> for the latest infomation about this product. In Carbide.c++ simply click the <b>Help &gt; Help Contents &gt; Carbide.c++ User Guide</b> to find the pages.</p>
 <p>To complete your installation and start Symbian C++ application development, you <span class="style3">must</span>  install the following: </p>
 <table width="80%"  border="0">
   <tr>
@@ -63,8 +58,8 @@
       </ul></td>
   </tr>
 </table>
-<hr size="1" noshade>
-<p class="footer style1" >Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>
-License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></p>
+<p>&nbsp;</p>
+<div id="footer"><span class="style6">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>
+License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></span></div>
 </body>
 </html>
--- a/core/com.nokia.carbide.cpp-feature/feature.xml	Fri Apr 24 10:31:21 2009 -0500
+++ b/core/com.nokia.carbide.cpp-feature/feature.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -2,7 +2,7 @@
 <feature
       id="com.nokia.carbide.cpp"
       label="%featureName"
-      version="2.0.4.qualifier"
+      version="2.1.0.qualifier"
       provider-name="Nokia"
       plugin="com.nokia.carbide.cpp"
       image="Carbide_Image.png">
--- a/core/com.nokia.carbide.cpp.codescanner/book.css	Fri Apr 24 10:31:21 2009 -0500
+++ b/core/com.nokia.carbide.cpp.codescanner/book.css	Mon Apr 27 15:07:35 2009 -0500
@@ -1,184 +1,184 @@
-/*	
-	Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
-	All rights reserved. 
-	License: http://www.eclipse.org/legal/epl-v10.html
-*/
-
-/*	Add whitespace around entire display to avoid crowding edges of view 	*/
-/* 	20070523-Removed top margin size to close gap between location breadcrumbs and page title	*/
-html {
-	margin: 2px 10px 10px 10px;
-	}
-
-/* 	Set default font to serif style, 12-pt and plain	*/
-body, p, table {
-	font-family: Georgia, "Times New Roman", Times, serif;
-	font-size: 13px;
-	font-weight: normal;
-}
-
-/*	Use sans-serif fonts for all title styles	*/
-h1, h2, h3, h4, h5, h6, strong, em {
-	font-family: Helvetica, sans-serif;
-	color: #000000;	
-	}
-
-h1	{ font-size:20px }
-h2	{ font-size:18px }
-h3	{ font-size:16px }
-h4	{ font-size:14px }
-h5	{ font-size:13px }
-h6	{ font-size:12px }
-
-/*	For headlines at the top of a view, add space	*/
-/*	20090224-changed green fade to gold header image	*/
-h1, h2, h3 {
-	background-image: url(html/images/brand/gold_header.png);
-	background-repeat: no-repeat;
-	padding:10px 0px 10px 12px;	
-	}
-
-li	{
-	margin-bottom:8px;	
-	margin-top:8px;
-	}
-
-/*	Footer includes space and a gray line above the company logo	*/
-#footer {
-	padding-top:10px;
-	margin-top:20px;
-	border-top:1px solid #999;
-	font-family: Helvetica, sans-serif;
-	font-size: 11px;
-	color:#333;
-	}
-
-.listing	{
-	font-family: "Courier New", Courier, mono;
-	color: #000000;
-	background-color: #FFFFCC;
-	margin: 5px 0px;
-	}
-		
-.code, pre	{
-	font-family: "Courier New", Courier, mono;
-	font-size: 13px;
-	color: #000000;
-	}
-
-.step	{
-	/* background-color: #EEE; */
-	/* margin: 10px 0px; */
-	color: #111;
-	/* border-bottom:2px solid #EEE; */
-	}
-	
-.substep	{
-	background-color: #EEE;
-	}
-	
-	
-/*	Figure/Listing/Table titles are centered and gray	*/
-p.table {
-	color: #999;
-	font-weight: bold;
-	padding-top: 5px;
-	}
-
-table	{
-	border: solid #999 1px;
-	table-layout: auto;
-	font-size: 13px;
-	}
-
-td, th	{
-	border: solid #999 1px;
-	padding: 5px;
-	vertical-align:top;
-	}
-	
-/*	20070522-replaced gray with green background to match gradiant color for title	*/
-th	{
-	background-color:#FDDD1F;	/* background-color:#acd79b;
-	background-color:#999;
-	color:#FFF; */
-	}
-
-div.ol.p	{
-	margin-left: 3em;
-	}
-
-/* Make all ordered/unordered list items appear in bold gray */
-div ol > li, div ul > li {
-	font-weight:bold;
-	color: #333;
-	}
-
-div ol > p, div ul > p, div li > p {
-	font-weight:normal;
-	}
-	
-/* Make all H4 and H5 items appear in bold gray against a light green background */
-div h5, div h4	{
-	padding:5px 0px 5px 12px;
-	background-color:#FFFF66;
-	/* background-color: #EEE; */
-	font-weight:bold;
-	color: #000000;
-	}
-	
-	
-/*	Notes stand out using a light top & bottom borders with dark gray text	*/
-p.note {
-	/* color: #03C; */
-	/* background-color: #FFFF99; */
-	color: #333;
-	padding: 5px;
-	margin-left: 1em;
-	margin-right: 1em;
-	border-top: solid #BBB thin;
-	border-bottom: solid #BBB thin;
-	}
-
-	
-/*	Figure/Listing/Table titles are centered and gray	*/
-p.figure {
-	color: #333;
-	text-align: center;
-	font-weight: bold;
-	}
-
-/*	highly visible red background and white text for things that need fixing before release	*/
-/*  SHOULD NOT BE PRESENT IN RELEASED PRODUCTS */
-.fix	{
-	background-color: red;
-	font-weight: bold;
-	color: white;
-	}
-
-.question	{
-	font-style:italic;
-	font-weight:bold;
-	color: #555;
-	}
-	
-.titleSmall {
-	font-family: Helvetica, sans-serif;
-	font-size: 11px;
-	}
-
-	
-.plain {
-	font-family: Helvetica, sans-serif;
-	font-size: 12px;
-	font-style: normal;
-	line-height: normal;
-	font-weight: normal;
-	font-variant: normal;
-	color: #000000;
-	text-decoration: none;
-	}
-
-a:link 		{ color: #0033CC }
-a:visited	{ color: #555555 }
-a:hover 	{ color: #0033CC }
+/*	
+	Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+	All rights reserved. 
+	License: http://www.eclipse.org/legal/epl-v10.html
+*/
+
+/*	Add whitespace around entire display to avoid crowding edges of view 	*/
+/* 	20070523-Removed top margin size to close gap between location breadcrumbs and page title	*/
+html {
+	margin: 2px 10px 10px 10px;
+	}
+
+/* 	Set default font to serif style, 12-pt and plain	*/
+body, p, table {
+	font-family: Georgia, "Times New Roman", Times, serif;
+	font-size: 13px;
+	font-weight: normal;
+}
+
+/*	Use sans-serif fonts for all title styles	*/
+h1, h2, h3, h4, h5, h6, strong, em {
+	font-family: Helvetica, sans-serif;
+	color: #000000;	
+	}
+
+h1	{ font-size:20px }
+h2	{ font-size:18px }
+h3	{ font-size:16px }
+h4	{ font-size:14px }
+h5	{ font-size:13px }
+h6	{ font-size:12px }
+
+/*	For headlines at the top of a view, add space	*/
+/*	20090224-changed green fade to gold header image	*/
+h1, h2, h3 {
+	background-image: url(html/images/brand/gold_header.png);
+	background-repeat: no-repeat;
+	padding:10px 0px 10px 12px;	
+	}
+
+li	{
+	margin-bottom:8px;	
+	margin-top:8px;
+	}
+
+/*	Footer includes space and a gray line above the company logo	*/
+#footer {
+	padding-top:10px;
+	margin-top:20px;
+	border-top:1px solid #999;
+	font-family: Helvetica, sans-serif;
+	font-size: 11px;
+	color:#333;
+	}
+
+.listing	{
+	font-family: "Courier New", Courier, mono;
+	color: #000000;
+	background-color: #FFFFCC;
+	margin: 5px 0px;
+	}
+		
+.code, pre	{
+	font-family: "Courier New", Courier, mono;
+	font-size: 13px;
+	color: #000000;
+	}
+
+.step	{
+	/* background-color: #EEE; */
+	/* margin: 10px 0px; */
+	color: #111;
+	/* border-bottom:2px solid #EEE; */
+	}
+	
+.substep	{
+	background-color: #EEE;
+	}
+	
+	
+/*	Figure/Listing/Table titles are centered and gray	*/
+p.table {
+	color: #999;
+	font-weight: bold;
+	padding-top: 5px;
+	}
+
+table	{
+	border: solid #999 1px;
+	table-layout: auto;
+	font-size: 13px;
+	}
+
+td, th	{
+	border: solid #999 1px;
+	padding: 5px;
+	vertical-align:top;
+	}
+	
+/*	20070522-replaced gray with green background to match gradiant color for title	*/
+th	{
+	background-color:#FDDD1F;	/* background-color:#acd79b;
+	background-color:#999;
+	color:#FFF; */
+	}
+
+div.ol.p	{
+	margin-left: 3em;
+	}
+
+/* Make all ordered/unordered list items appear in bold gray */
+div ol > li, div ul > li {
+	font-weight:bold;
+	color: #333;
+	}
+
+div ol > p, div ul > p, div li > p {
+	font-weight:normal;
+	}
+	
+/* Make all H4 and H5 items appear in bold gray against a light green background */
+div h5, div h4	{
+	padding:5px 0px 5px 12px;
+	background-color:#FFFF66;
+	/* background-color: #EEE; */
+	font-weight:bold;
+	color: #000000;
+	}
+	
+	
+/*	Notes stand out using a light top & bottom borders with dark gray text	*/
+p.note {
+	/* color: #03C; */
+	/* background-color: #FFFF99; */
+	color: #333;
+	padding: 5px;
+	margin-left: 1em;
+	margin-right: 1em;
+	border-top: solid #BBB thin;
+	border-bottom: solid #BBB thin;
+	}
+
+	
+/*	Figure/Listing/Table titles are centered and gray	*/
+p.figure {
+	color: #333;
+	text-align: center;
+	font-weight: bold;
+	}
+
+/*	highly visible red background and white text for things that need fixing before release	*/
+/*  SHOULD NOT BE PRESENT IN RELEASED PRODUCTS */
+.fix	{
+	background-color: red;
+	font-weight: bold;
+	color: white;
+	}
+
+.question	{
+	font-style:italic;
+	font-weight:bold;
+	color: #555;
+	}
+	
+.titleSmall {
+	font-family: Helvetica, sans-serif;
+	font-size: 10px;
+	}
+
+	
+.plain {
+	font-family: Helvetica, sans-serif;
+	font-size: 12px;
+	font-style: normal;
+	line-height: normal;
+	font-weight: normal;
+	font-variant: normal;
+	color: #000000;
+	text-decoration: none;
+	}
+
+a:link 		{ color: #0033CC }
+a:visited	{ color: #555555 }
+a:hover 	{ color: #0033CC }
--- a/core/com.nokia.carbide.cpp.codescanner/html/codescanner.htm	Fri Apr 24 10:31:21 2009 -0500
+++ b/core/com.nokia.carbide.cpp.codescanner/html/codescanner.htm	Mon Apr 27 15:07:35 2009 -0500
@@ -1,32 +1,31 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<html>
-<head>
-	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
-	<title>CodeScanner User Guide</title>
-    <link href="../book.css" rel="stylesheet" type="text/css">
-	<style>
-		table, td, th { border: 0px none #FFF; }
-	</style>
-</head>
-
-<body background="images/brand/background_carbide.jpg" >
-<p>&nbsp;</p>
-<table width="530" border="0" align="center" cellpadding="0" cellspacing="5" bgcolor="#FFFFFF" >
-  <tr>
-    <td width="215"><img src="images/brand/about_cpp.png" width="225" height="200"></td>
-    <td width="294" valign="bottom"><p align="right"><b><img src="images/brand/brandmark_cpp.gif" width="106" height="52"></b></p>
-      <p align="right">&nbsp;</p>
-      <p align="right">&nbsp;</p>
-      <p align="right">&nbsp;</p>
-      <p class="titleSmall">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></p>
-    </td>
-  </tr>
-  <tr>
-    <td colspan="2"><h1 align="center">CodeScanner User Guide</h1>
-    <p align="center" class="titleSmall">Version 2.1.1; February, 2009</p></td>
-  </tr>
-</table>
-<p align="center">&nbsp;</p>
-</body>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+
+<html>
+<head>
+	<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+	<title>CodeScanner User Guide</title>
+    <link href="../book.css" rel="stylesheet" type="text/css">
+	<style>
+		table, td, th { border: 0px none #FFF; }
+	</style>
+</head>
+
+<body background="images/brand/background_carbide.jpg" >
+<p>&nbsp;</p>
+<table width="530" border="0" align="center" cellpadding="0" cellspacing="5" bgcolor="#FFFFFF" >
+  <tr>
+    <td width="215"><img src="images/brand/about_cpp.png" width="225" height="200"></td>
+    <td width="294" valign="bottom"><p align="right"><b><img src="images/brand/brandmark_cpp.gif" width="106" height="52"></b></p>
+      <p align="right">&nbsp;</p>
+      <p align="right">&nbsp;</p>
+      <p class="titleSmall">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></p>
+    </td>
+  </tr>
+  <tr>
+    <td colspan="2"><h1 align="center">CodeScanner User Guide</h1>
+    <p align="center" class="titleSmall">Version 2.1.3; April, 2009</p></td>
+  </tr>
+</table>
+<p align="center">&nbsp;</p>
+</body>
 </html>
\ No newline at end of file
--- a/core/com.nokia.carbide.cpp.codescanner/html/customizing_cs.htm	Fri Apr 24 10:31:21 2009 -0500
+++ b/core/com.nokia.carbide.cpp.codescanner/html/customizing_cs.htm	Mon Apr 27 15:07:35 2009 -0500
@@ -99,12 +99,12 @@
 &lt;connect category=&quot;canpanic&quot; enable=&quot;true&quot; severity=&quot;high&quot;/&gt;   <br />
 &lt;ConnectAndDontCloseMemberVariable category=&quot;functionality&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   &lt;constnames category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;consttdescptr category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
-&lt;controlornull category=&quot;canpanic&quot; enable=&quot;true&quot; severity=&quot;high&quot;/&gt;   <br />
+&lt;controlornull category=&quot;canpanic&quot; enable=&quot;true&quot; severity=&quot;high&quot;/&gt;   <br>
 &lt;crepository category=&quot;other&quot;                   enable=&quot;true&quot;                   severity=&quot;low&quot;/&gt;<br />
 &lt;ctltargettype category=&quot;functionality&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   <br />
 &lt;customizableicons category=&quot;other&quot;                         enable=&quot;true&quot;                         severity=&quot;low&quot;&gt;<br>
-&nbsp;&nbsp;&nbsp;&nbsp;&lt;iconsRE&gt;iconA.bmp|iconB.svg|iconC&lt;/iconsRE&gt; <br>
-&lt;/customizableicons&gt;<br>
+	&nbsp;&nbsp;&nbsp;&nbsp;&lt;iconsRE&gt;iconA.bmp|iconB.svg|iconC&lt;/iconsRE&gt;     <br>
+	&lt;/customizableicons&gt;<br>
 <br />
 &lt;debugrom category=&quot;performance&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   <br />
 &lt;declarename category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
@@ -112,14 +112,14 @@
 &lt;destructor category=&quot;canpanic&quot; enable=&quot;true&quot; severity=&quot;high&quot;/&gt;   <br />
 &lt;doubleSemiColon category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;driveletters category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
-<br />
+  <br />
 &lt;eikbuttons category=&quot;localisation&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   <br />
 &lt;eikonenvstatic category=&quot;performance&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   <br />
 &lt;enummembers category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;enumnames category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;exportinline category=&quot;functionality&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   <br />
 &lt;exportpurevirtual category=&quot;functionality&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   <br />
-<br />
+  <br />
 &lt;flags category=&quot;other&quot;             enable=&quot;true&quot;             severity=&quot;low&quot;/&gt;<br>
 &lt;foff category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;forbiddenwords category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;&gt;       <br />
@@ -127,22 +127,22 @@
 &lt;/forbiddenwords&gt;<br />
 &lt;forgottoputptroncleanupstack category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;friend category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
-<br />
+  <br />
 &lt;goto category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
-<br />
+  <br />
 &lt;ifassignments category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;ifpreprocessor category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;inheritanceorder category=&quot;canpanic&quot; enable=&quot;true&quot; severity=&quot;high&quot;/&gt;   <br />
 &lt;intleaves category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
-<br />
+  <br />
 &lt;jmp category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
-<br />
+  <br />
 &lt;leave category=&quot;canpanic&quot; enable=&quot;true&quot; severity=&quot;high&quot;/&gt;   <br />
 &lt;LeaveNoError category=&quot;functionality&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   <br />
 &lt;leavingoperators category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;LFunctionCantLeave category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;&gt;       &lt;LFunctionIgnoreRE&gt;RunL&lt;/LFunctionIgnoreRE&gt;   &lt;/LFunctionCantLeave&gt;   <br />
 &lt;longlines category=&quot;codingstandards&quot; enable=&quot;true&quot; length=&quot;160&quot; severity=&quot;low&quot;/&gt;   <br />
-<br />
+  <br />
 &lt;magicnumbers category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;mclassdestructor category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;memberlc category=&quot;canpanic&quot; enable=&quot;true&quot; severity=&quot;high&quot;/&gt;   <br />
@@ -155,7 +155,7 @@
 &lt;multipledeclarations category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;multipleinheritance category=&quot;functionality&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   <br />
 &lt;mydocs category=&quot;functionality&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   <br />
-<br />
+  <br />
 &lt;namespace category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;newlreferences category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;noleavetrap category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
@@ -164,10 +164,10 @@
 &lt;nonleavenew category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;nonunicodeskins category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;null category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
-<br />
+  <br />
 &lt;open category=&quot;canpanic&quot; enable=&quot;true&quot; severity=&quot;high&quot;&gt;       &nbsp;&nbsp;&nbsp;&nbsp;&lt;openIgnoreRE&gt;RDesReadStream|RDesWriteStream&lt;/openIgnoreRE&gt;<br />
 &lt;/open&gt;   <br />
-<br />
+  <br />
 &lt;pointertoarrays category=&quot;performance&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   <br />
 &lt;pragmadisable category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;pragmamessage category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
@@ -175,17 +175,17 @@
 &lt;privateinheritance category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;pushaddrvar category=&quot;canpanic&quot; enable=&quot;true&quot; severity=&quot;high&quot;/&gt;   <br />
 &lt;pushmember category=&quot;canpanic&quot; enable=&quot;true&quot; severity=&quot;high&quot;/&gt;   <br />
-<br />
+  <br />
 &lt;readresource category=&quot;canpanic&quot; enable=&quot;true&quot; severity=&quot;high&quot;/&gt;   <br />
 &lt;resourcenotoncleanupstack category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;resourcesonheap category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   &lt;returndescriptoroutofscope category=&quot;canpanic&quot; enable=&quot;true&quot; severity=&quot;high&quot;/&gt;   <br />
 &lt;rfs category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;rssnames category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
-<br />
+  <br />
 &lt;stringliterals category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;stringsinresourcefiles category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;struct category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
-<br />
+  <br />
 &lt;tcclasses category=&quot;functionality&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   <br />
 &lt;tclassdestructor category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;todocomments category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
@@ -193,7 +193,7 @@
 &lt;trapeleave category=&quot;performance&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   <br />
 &lt;traprunl category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;trspassing category=&quot;functionality&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   <br />
-<br />
+  <br />
 &lt;uids category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;uncompressedaif category=&quot;performance&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   <br />
 &lt;uncompressedbmp category=&quot;performance&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   <br />
@@ -201,14 +201,14 @@
 &lt;userafter category=&quot;performance&quot; enable=&quot;true&quot; severity=&quot;medium&quot;/&gt;   <br />
 &lt;userfree category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;userWaitForRequest category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
-<br />
+  <br />
 &lt;variablenames category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
 &lt;voidparameter category=&quot;codingstandards&quot; enable=&quot;true&quot; severity=&quot;low&quot;/&gt;   <br />
-<br />
+  <br />
 &lt;worryingcomments category=&quot;codereview&quot; enable=&quot;true&quot; severity=&quot;low&quot;&gt;       &nbsp;&nbsp;&nbsp;&nbsp;&lt;worryRE&gt;\!|\?|[Zz]{3}|kludge|workaround|\scrap|hack&lt;/worryRE&gt;   <br />
 &lt;/worryingcomments&gt;<br />
-<br />
-<span class="listing">&lt;/scripts&gt; </span></p>
+  <br />
+  <span class="listing">&lt;/scripts&gt; </span></p>
    <h4><a name="SEV_Element" id="ARG_Element4"></a>Severities Element</h4>
    <p>Each Severities element can contain one or more Severity elements, each of which corresponds to a severity level: </p>
    <ul>
Binary file core/com.nokia.carbide.cpp.codescanner/html/images/brand/about_cpp.png has changed
Binary file core/com.nokia.carbide.cpp.codescanner/html/images/brand/background_carbide.jpg has changed
--- a/core/com.nokia.carbide.cpp.codescanner/html/release_notes.htm	Fri Apr 24 10:31:21 2009 -0500
+++ b/core/com.nokia.carbide.cpp.codescanner/html/release_notes.htm	Mon Apr 27 15:07:35 2009 -0500
@@ -7,7 +7,7 @@
 <link href="../book.css" rel="stylesheet" type="text/css">
 </head>
 <body bgcolor="#FFFFFF">
-<h2>CodeScanner Release Notes v2.1.2</h2>
+<h2>CodeScanner Release Notes v2.1.3</h2>
 <ul>
   <li> <a href="#Changes_from_Previous_Releases">Changes from Previous Releases</a></li>
   <li><a href="#whatsNew">What's new </a></li>
@@ -19,11 +19,14 @@
   
   <li>Added support for the following IAD user-defined <a href="customizing_cs.htm">rules</a>. The new rules include:
     <ul>
-        <li><span class="code">&lt;flags&gt;</span> - new IAD rule to check flag usage</li>
+      
+      <li><span class="code">&lt;flags&gt;</span> - new IAD rule to check flag usage</li>
       <li><span class="code">&lt;crepository&gt; </span>- new IAD rule to check Central Repository usage</li>
       <li><span class="code">&lt;customizableicons&gt; </span>- new IAD rule to check customizable icons</li>
     </ul>
   </li>
+</ul>
+<h4>2.1.2</h4>
   <li>Added support for  <a href="pref_codescaner_01.htm">Knowledge Base Scanning</a>, the ability to scan code and detect possible  API issues related to a specific SDK, for example when porting to a new Touch UI SDK. For each SDK, specific porting information is defined as a set of rules specified in  XML files. CodeScanner can merge these into the existing set of CodeScanner rules for   scanning operations. The results are displayed in the <strong>Console</strong> view and as information markers  in source code.</li>
 </ul>
 <h4>2.1.1</h4>
--- a/core/com.nokia.carbide.cpp.doc.user/html/bugs_fixed.htm	Fri Apr 24 10:31:21 2009 -0500
+++ b/core/com.nokia.carbide.cpp.doc.user/html/bugs_fixed.htm	Mon Apr 27 15:07:35 2009 -0500
@@ -15,10 +15,13 @@
 <body bgcolor="#ffffff">
 <h2>Carbide.c++ bugs fixed </h2>
 <p>This is a comprehensive list of bugs fixed by release: </p>
+<ul><li><a href="#bugs210">Bugs Fixed in 2.1.0</a></li>
+  <li><a href="#bugs204">2.0.4</a>, <a href="#bugs203">2.0.3</a>, <a href="#bugs202"> 2.0.2</a>, <a href="#bugs200">2.0.0</a></li>
+  <li><a href="#bugs131">1.3.1</a>, <a href="#bugs130">1.3.0</a> , <a href="#bugs122">1.2.2</a>, <a href="#bugs121">1.2.1</a></li>
+</ul>
+<h3><a name="bugs210" id="bugs4"></a>Bugs Fixed in v2.1.0</h3>
 <ul>
-  <li><a href="#bugs204">Bugs Fixed in 2.0.4</a></li>
-  <li><a href="#bugs203">2.0.3</a>, <a href="#bugs202">2.0.2</a>, <a href="#bugs200">2.0.0</a></li>
-  <li><a href="#bugs131">1.3.1</a>, <a href="#bugs130">1.3.0</a> , <a href="#bugs122">1.2.2</a>, <a href="#bugs121">1.2.1</a></li>
+  <li>???</li>
 </ul>
 <h3><a name="bugs204" id="bugs5"></a>Bugs Fixed in v2.0.4</h3>
 <ul>
--- a/core/com.nokia.carbide.cpp.doc.user/html/release_notes.htm	Fri Apr 24 10:31:21 2009 -0500
+++ b/core/com.nokia.carbide.cpp.doc.user/html/release_notes.htm	Mon Apr 27 15:07:35 2009 -0500
@@ -16,7 +16,7 @@
   </style>
 </head>
 <body bgcolor="#ffffff">
-<h2>Carbide.c++ Release Notes 2.0.4</h2>
+<h2>Carbide.c++ Release Notes 2.1.0</h2>
 <p>The Carbide.c++  is a comprehensive development tool suite for Symbian OS that is based on the Eclipse framework. The C++ Development Toolkit (CDT), provides the foundation for project and build tools management, as well as the primary interface for the debugger to communicate with the IDE. </p>
 <p>This is a collection of important information concerning last-minute
   changes and other topics that deserve special attention.&nbsp;Please
@@ -35,10 +35,14 @@
 Updating the CDT feature in Carbide.c++/Eclipse will wipe out our
 changes making the tools unusable!</p>
 <p> See the <a href="hints_tips.htm">Tips &amp; tricks</a> page for more helpful information.</p>
-<h3><a name="whatsNew" id="whatsNew"></a>What's New in 2.0.4 </h3>
+<h3><a name="whatsNew" id="whatsNew2"></a>What's New in 2.1.0 </h3>
 <p>The following features for Symbian OS development are provided within Carbide.c++:</p>
 <ul>
-  <li><b>Hover Help</b> - pause the pointer over a resolved Symbian symbol in the C/C++ editor to view information from the Symbian API Reference for quick reference.</li>
+  <li><b>???</b> - </li>
+</ul>
+<h4>2.0.4</h4>
+<ul>
+  <li><b>Hover Help</b> - hover your pointer over a recognized Symbian symbol in an editor and see the Symbian API Reference information appear to assist you.</li>
 </ul>
 <h4>2.0.3</h4>
 <ul>
--- a/core/com.nokia.carbide.cpp.doc.user/html/tasks/registers/mem_reg_viewing.htm	Fri Apr 24 10:31:21 2009 -0500
+++ b/core/com.nokia.carbide.cpp.doc.user/html/tasks/registers/mem_reg_viewing.htm	Mon Apr 27 15:07:35 2009 -0500
@@ -1,34 +1,34 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<meta http-equiv="Content-Style-Type" content="text/css" />
-<meta name="LASTUPDATED" content="06/17/05 11:09:43" />
-<title>Expanding Registers</title>
-<link rel="StyleSheet" href="../../../book.css" type="text/css"/>
-</head>
-<body bgcolor="#FFFFFF">
-<h2>Expanding Register Groups</h2>
-<p>You can expand register groups  in the <a href="../../reference/view_registers.htm">Registers</a> view to inspect and <a href="mem_reg_changing.htm">modify</a> their contents.</p>
-<p class="note"><b>NOTE</b> When using an emulator, the registers shown are those of the x86 processor on the host machine, not that of the target device.</p>
-<div class="step">
-  <h4>Viewing Register Groups </h4>
-  <ul>
-    <li>Click the tree control (<img src="../../images/icons/btn_hier_control.png" width="11" height="11" align="absmiddle" />) to expand a register group</li>
-  </ul>
-  <ol>
-    <p>Expanding a group shows its contents, by register name and corresponding value.</p>
-    <p align="center"><img src="../../reference/images/view_registers.png" width="367" height="370" /></p>
-    <p class="figure">Figure 1 - Expanded register group</p>
-  </ol>
-</div>
-  <h5>Other references </h5>
-  <ul>
-    <li><a href="../../concepts/registers.htm">Registers</a></li>
-    <li><a href="mem_reg_changing.htm">Changing Register Values</a></li>
-    <li><a href="mem_reg_viewing.htm">Registers View </a></li>
-  </ul>
-  <div id="footer">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></div>
-
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta name="LASTUPDATED" content="06/17/05 11:09:43" />
+<title>Expanding Registers</title>
+<link rel="StyleSheet" href="../../../book.css" type="text/css"/>
+</head>
+<body bgcolor="#FFFFFF">
+<h2>Expanding Register Groups</h2>
+<p>You can expand register groups  in the <a href="../../reference/view_registers.htm">Registers</a> view to inspect and <a href="mem_reg_changing.htm">modify</a> their contents.</p>
+<p class="note"><b>NOTE</b> When using an emulator, the registers shown are those of the x86 processor on the host machine, not that of the target device.</p>
+<div class="step">
+  <h4>Viewing Register Groups </h4>
+  <ul>
+    <li>Click the tree control (<img src="../../images/icons/btn_hier_control.png" width="11" height="11" align="absmiddle" />) to expand a register group</li>
+  </ul>
+  <ol>
+    <p>Expanding a group shows its contents, by register name and corresponding value.</p>
+    <p align="center"><img src="../../reference/images/view_registers.png" width="367" height="370" /></p>
+    <p class="figure">Figure 1 - Expanded register group</p>
+  </ol>
+</div>
+  <h5>Other references </h5>
+  <ul>
+    <li><a href="../../concepts/registers.htm">Registers</a></li>
+    <li><a href="mem_reg_changing.htm">Changing Register Values</a></li>
+    <li><a href="../../reference/view_registers.htm">Registers View </a></li>
+</ul>
+  <div id="footer">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></div>
+
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/com.nokia.carbide.cpp.doc.user/html/tasks/start/carbide_help.htm	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,28 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta name="LASTUPDATED" content="06/17/05 11:09:43" />
+<title>Carbide Help</title>
+<link rel="StyleSheet" href="../../../book.css" type="text/css"/>
+</head>
+<body bgcolor="#FFFFFF">
+<h2>Carbide Help</h2>
+<p>The Carbide IDE provides a wealth of help resources you can tap into to make learning and using Carbide easy. They include:</p>
+<ul>
+  
+  <li><b>Welcome</b> pages &#8212; the Welcome pages provide links to what's new, bug fixes, examples, and internet resources. They provide all the information you need to learn about new features and capabilites. Click <b>Help &gt; Welcome</b> to view the various pages.</li>
+  <li><b>Manuals</b> &#8212; extensive documentation on all aspect of Carbide, Carbide tools, SDKs, and more, are available by clicking <b>Help &gt; Help Content</b> and then choosing the manual to read.</li>
+  <li><b>Cheat sheets</b> &#8212; cheat sheets provide interactive assistance for many common tasks. They appear in their own view and allow you to step through the instructions at your own pace. Click <b>Help &gt; Cheat Sheets</b>, then select the cheat sheet to open.</li>
+  <li><b>F1</b> support &#8212; press <b>F1</b> to open a informational Help view about the currently selected view or dialog.</li>
+  <li><b>Hover help</b> support &#8212; hover the pointer over a symbol in any C/C++ editor and a popup  appears with related information. If the symbol represents a Symbian API call  then Symbian API information appears.</li>
+</ul>
+<h4>References</h4>
+<ul>
+  <li> <a href="file:///fturovic/Documents/workspace-2.x.x/carbidecpp/core/com.nokia.carbide.cpp.doc.user/html/tasks/start/carbide_overview.htm">Carbide.c++ Overview</a></li>
+</ul>
+<div id="footer">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></div>
+
+</body>
+</html>
\ No newline at end of file
--- a/core/com.nokia.carbide.cpp.doc.user/html/tasks/start/carbide_install.htm	Fri Apr 24 10:31:21 2009 -0500
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<meta http-equiv="Content-Style-Type" content="text/css" />
-<meta name="LASTUPDATED" content="06/17/05 11:09:43" />
-<title>Carbide.c++ Installation</title>
-<link rel="StyleSheet" href="../../../book.css" type="text/css"/>
-</head>
-<body bgcolor="#FFFFFF">
-<h2>Carbide.c++ Installation</h2>
-<p>You must install Carbide.c++ on a computer in order to create Symbian programs. </p>
-<p class="note"><b>NOTE</b> Also, see <a href="carbide_requirements.htm">Carbide.c++ Requirements</a> to ensure you have everything required to develop Symbian programs.</p>
-<div class="step">
-  <h4>Installing Carbide.c++ </h4>
-  <ol>
-    <li>Launch the Carbide.c++ installer</li>
-    <p>The first page of install wizard appears.</p>
-    <li>Follow install wizard instructions and accept default settings</li>
-        <li>Click Finish in installer window</li>
-    <p>The installer exits.</p>
-<li>Install a software development kit (SDK) for Symbian development</li>
-    <p>You must have at least one Symbian OS SDK's installed to develop programs for Symbian devices. See <a href="carbide_requirements.htm">System Requirements</a> for a complete list of supported SDKs.</p>
-    <li>Install Perl</li>
-    <p>Download and install <a href="ftp://ftp.activestate.com/ActivePerl/Windows/5.6/ActivePerl-5.6.1.635-MSWin32-x86.msi">ActivePerl-5.6.1.635.</a></p>
-    <li>Install the &#8220;Symbian Connect&#8221; software that came with your phone</li>
-    <p>You need software that communicates with the target device from your PC. For more information, see <a href="carbide_deploying.htm">Deploying Programs to Devices</a>.</p>
-  </ol>
-</div>
-<div id="footer">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></div>
-
-</body>
-</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/com.nokia.carbide.cpp.doc.user/html/tasks/start/carbide_overview.htm	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,24 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta name="LASTUPDATED" content="06/17/05 11:09:43" />
+<title>Carbide Overview</title>
+<link rel="StyleSheet" href="../../../book.css" type="text/css"/>
+</head>
+<body bgcolor="#FFFFFF">
+<h2>Carbide Overview</h2>
+<p>Carbide is an integrated development environment (IDE) designed to develop <a href="http://www.SymbianFoundation.org">Symbian</a> applications for mobile devices. Carbide is built using the open source <a href="http://www.eclipse.org">Eclipse</a> and C/C++ development toolkit (CDT) projects as its base with a wealth of additional tools that make it ideal for developing mobile applications. Carbide includes all the tools necessary to develop mobile applications including editors, GUI designers, project management tools, source code analysis tools, compilers, debuggers, profilers, on-device agents, revision control systems,and much more.</p>
+<p>The basic structure of creating applications is easy to understand. You create a project, add some code, compile it into an executable file, then test it on an emulator, a simulator, or the actual device. If the application is compiled for debugging you can also control the program from within Carbide to ensure that the program behaves as expected using breakpoints, watchpoints, view variables, memory, stack traces, and other intimate details of the program as it runs.</p>
+<p>To learn more about Carbide, see the following topics:</p>
+<ul>
+  <li><a href="carbide_requirements.htm">Carbide system requirements</a></li>
+  <li><a href="carbide_help.htm">Carbide Help</a></li>
+  <li><a href="carbide_tools.htm">Carbide Tools</a></li>
+  <li><a href="carbide_updating.htm">Updating Carbide</a></li>
+</ul>
+<div id="footer">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></div>
+
+</body>
+</html>
\ No newline at end of file
--- a/core/com.nokia.carbide.cpp.doc.user/html/tasks/start/carbide_requirements.htm	Fri Apr 24 10:31:21 2009 -0500
+++ b/core/com.nokia.carbide.cpp.doc.user/html/tasks/start/carbide_requirements.htm	Mon Apr 27 15:07:35 2009 -0500
@@ -1,104 +1,108 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<meta http-equiv="Content-Style-Type" content="text/css" />
-<meta name="LASTUPDATED" content="06/17/05 11:09:43" />
-<title>Carbide.c++ Installation</title>
-<link rel="StyleSheet" href="../../../book.css" type="text/css"/>
-</head>
-<body bgcolor="#FFFFFF">
-<h2>System Requirements</h2>
-<p>You use the Carbide.c++ IDE in conjunction with a recognized SDK to develop Symbian software.</p>
-<p> In practice, whether you use an SDK, a developer kit (DevKit), or both depends on the edition of
-    Carbide.c++ you have (see Table 1). Further, if you use an OS devkit,
-    it must be version  9.1b or higher for EKA2 with
-  Platform Security support.</p>
-<h5>Table 1. Support packages used for development with each Carbide.c++ Editions </h5>
-<table width="100%"  border="0" cellpadding="3" cellspacing="0">
-  <tr>
-    <th width="28%" scope="col">Carbide.c++ Edition</th>
-    <th width="35%" scope="col">Support Packages <br />
-    Used for Software Development </th>
-    <th width="37%" scope="col">What You Can Do...</th>
-  </tr>
-  <tr>
-    <td height="65"><b>Developer / Professional</b></td>
-    <td rowspan="2" valign="middle"><p>An SDK or OS developer kit (DevKit) including:</p>
-      <ul><li>9.x or higher for Platform Security </li>
-    </ul></td>
-    <td><p>Targets: S60 5th and 3rd Ed., Qt, UIQ</p>
-      <p>Debugger: Emulators, on-device debugging </p></td>
-  </tr>
-  <tr>
-    <td><b>OEM</b></td>
-    <td><p>Targets: S60 5th and 3rd Ed., Qt, UIQ</p>
-    <p>Debugger: Emulators, on-device debugging, device debugging in ROM, kernel debugging </p>
-    <p>Performance Investigator: application performance data, memory usage, power usage, button event reporting </p></td>
-  </tr>
-</table>
-<h5>Table 2. System Requirements</h5>
-<table width="85%"  border="0" cellpadding="2">
-  <tr>
-    <th width="27%" scope="row">Hardware</th>
-    <td width="73%"><ul>
-        <li>x86-based personal computer </li>
-        <li>1800MHz</li>
-        <li> 1GB of RAM minimum, recommend 2GB or more</li>
-        <li>CD-ROM drive </li>
-        </ul>
-    </td>
-  </tr>
-  <tr>
-    <th scope="row">Operating System </th>
-    <td><p>Microsoft&reg; Windows&reg; XP (Service Pack 2) recommended, Microsoft&reg; Windows&reg; Vista&reg; supported </p>
-        <p class="note"><b>NOTE</b> While Carbide.c++ supports many different OS configurations, only the ones listed here provide for optimal Symbian development. </p>
-        <p class="note"><b>NOTE</b> If you experience any VM issues, see the <a href="../../hints_tips.htm#VMissues">Tips &amp; Hints</a> page for info on modifying Carbide's default memory setup. </p></td>
-  </tr>
-  <tr>
-    <th scope="row">Other Software </th>
-    <td><p>A Symbian OS&#8482; SDK and Perl:</p>
-      <ul>
-          <li>S60 Platform SDKs (<a href="http://forum.nokia.com/info/sw.nokia.com/id/4a7149a5-95a5-4726-913a-3c6f21eb65a5/S60-SDK-0616-3.0-mr.html">forum.nokia.com/main/resources/tools_and_sdks/carbide/</a>)
-            <ul>
-              <li>S60 5th Edition</li>
-              <li>S60 3rd Edition, FP1</li>
-              <li>S60 3rd Edition, MR </li>
-              <li>S60 3rd Edition </li>
-            </ul>
-        </li>
-        <li>Qt
-          (<a href="http://www.trolltech.com/">www.trolltech.com</a>)
-          <ul>
-            <li>Qt SDK for S60</li>
-          </ul>
-        </li>
-        <li>UIQ SDKs (<a href="http://www.uiq.com/">www.uiq.com</a>)
-          <ul>
-            <li>UIQ 3.1 </li>
-            <li>UIQ 3.0</li>
-          </ul>
-        </li>
-      </ul>
-      <ul><li>Perl (<a href="http://www.activestate.com">www.activestate.com</a>)
-    (required)              
-          <ul>
-              <li><a href="ftp://ftp.activestate.com/ActivePerl/Windows/5.6/ActivePerl-5.6.1.635-MSWin32-x86.msi">ActivePerl-5.6.1.635</a></li>
-          </ul></li>
-          <li>Symbian Connect software 
-          <p>Software that communicates between a PC and a target device. For example, <a href="http://europe.nokia.com/nokia/0,,72014,00.html">Nokia PC Suite</a>. </p></li>
-      </ul></td>
-  </tr>
-  <tr>
-    <th scope="row">Disk Space </th>
-    <td><ul>
-        <li>700 MB for Carbide.c++</li>
-        <li>Up to 1.5 GB per S60 SDK</li>
-        <li>1.5 GB for each Symbian OS&#8482; SDK installation</li>
-    </ul></td>
-  </tr>
-</table>
-<div id="footer">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></div>
-
-</body>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta name="LASTUPDATED" content="06/17/05 11:09:43" />
+<title>Carbide.c++ Installation</title>
+<link rel="StyleSheet" href="../../../book.css" type="text/css"/>
+</head>
+<body bgcolor="#FFFFFF">
+<h2>System Requirements</h2>
+<p>You use the Carbide.c++ IDE in conjunction with a recognized SDK to develop Symbian software.</p>
+<p> In practice, whether you use an SDK, a developer kit (DevKit), or both depends on the edition of
+    Carbide.c++ you have (see Table 1). Further, if you use an OS devkit,
+    it must be version  9.1b or higher for EKA2 with
+  Platform Security support.</p>
+<h5>Table 1. Support packages used for development with each Carbide.c++ Editions </h5>
+<table width="100%"  border="0" cellpadding="3" cellspacing="0">
+  <tr>
+    <th width="28%" scope="col">Carbide.c++ Edition</th>
+    <th width="35%" scope="col">Support Packages <br />
+    Used for Software Development </th>
+    <th width="37%" scope="col">What You Can Do...</th>
+  </tr>
+  <tr>
+    <td height="65"><b>Developer / Professional</b></td>
+    <td rowspan="2" valign="middle"><p>An SDK or OS developer kit (DevKit) including:</p>
+      <ul><li>9.x or higher for Platform Security </li>
+    </ul></td>
+    <td><p>Targets: S60 5th and 3rd Ed., Qt, UIQ</p>
+      <p>Debugger: Emulators, on-device debugging</p>
+    <p>UI Designer: create graphical interfaces quickly using standard UI components</p></td>
+  </tr>
+  <tr>
+    <td><b>OEM</b></td>
+    <td><p>Targets: S60 5th and 3rd Ed., Qt, UIQ</p>
+    <p>Debugger: Emulators, on-device debugging, device debugging in ROM, kernel debugging </p>
+    <p>Performance Investigator: application performance data, memory usage, power usage, button event reporting </p></td>
+  </tr>
+</table>
+<h5>Table 2. System Requirements</h5>
+<table width="85%"  border="0" cellpadding="2">
+  <tr>
+    <th width="27%" scope="row">Hardware</th>
+    <td width="73%"><ul>
+        <li>x86-based personal computer </li>
+        <li>1800MHz</li>
+        <li> 1GB of RAM minimum, recommend 2GB or more</li>
+        <li>CD-ROM drive </li>
+        </ul>
+    </td>
+  </tr>
+  <tr>
+    <th scope="row">Operating System </th>
+    <td><p>Microsoft&reg; Windows&reg; XP (Service Pack 2) recommended, Microsoft&reg; Windows&reg; Vista&reg; supported </p>
+        <p class="note"><b>NOTE</b> While Carbide.c++ supports many different OS configurations, only the ones listed here provide for optimal Symbian development. </p>
+        <p class="note"><b>NOTE</b> If you experience any VM issues, see the <a href="../../hints_tips.htm#VMissues">Tips &amp; Hints</a> page for info on modifying Carbide's default memory setup. </p></td>
+  </tr>
+  <tr>
+    <th scope="row">Other Software </th>
+    <td><p>A Symbian OS&#8482; SDK and Perl:</p>
+      <ul>
+          <li>S60 Platform SDKs (<a href="http://forum.nokia.com/info/sw.nokia.com/id/4a7149a5-95a5-4726-913a-3c6f21eb65a5/S60-SDK-0616-3.0-mr.html">forum.nokia.com/main/resources/tools_and_sdks/carbide/</a>)
+            <ul>
+              <li>S60 5th Edition</li>
+              <li>S60 3rd Edition, FP1</li>
+              <li>S60 3rd Edition, MR </li>
+              <li>S60 3rd Edition </li>
+            </ul>
+        </li>
+        <li>Qt
+          (<a href="http://www.trolltech.com/">www.trolltech.com</a>)
+          <ul>
+            <li>Qt SDK for S60</li>
+          </ul>
+        </li>
+        <li>UIQ SDKs (<a href="http://www.uiq.com/">www.uiq.com</a>)
+          <ul>
+            <li>UIQ 3.1 </li>
+            <li>UIQ 3.0</li>
+          </ul>
+        </li>
+      </ul>
+      <ul><li>Perl (<a href="http://www.activestate.com">www.activestate.com</a>)
+    (required)              
+          <ul>
+              <li><a href="ftp://ftp.activestate.com/ActivePerl/Windows/5.6/ActivePerl-5.6.1.635-MSWin32-x86.msi">ActivePerl-5.6.1.635</a></li>
+          </ul></li>
+          <li>Symbian Connect software 
+          <p>Software that communicates between a PC and a target device. For example, <a href="http://europe.nokia.com/nokia/0,,72014,00.html">Nokia PC Suite</a>. </p></li>
+      </ul></td>
+  </tr>
+  <tr>
+    <th scope="row">Disk Space </th>
+    <td><ul>
+        <li>700 MB for Carbide.c++</li>
+        <li>Up to 1.5 GB for each S60 SDK installation</li>
+    </ul></td>
+  </tr>
+</table>
+<h4>References</h4>
+<ul>
+  <li> <a href="carbide_overview.htm">Carbide.c++ Overview</a></li>
+</ul>
+<div id="footer">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></div>
+
+</body>
 </html>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/core/com.nokia.carbide.cpp.doc.user/html/tasks/start/carbide_tools.htm	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,20 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta name="LASTUPDATED" content="06/17/05 11:09:43" />
+<title>Carbide Tools</title>
+<link rel="StyleSheet" href="../../../book.css" type="text/css"/>
+</head>
+<body bgcolor="#FFFFFF">
+<h2>Carbide Tools</h2>
+<p>&nbsp;</p>
+<h4>References</h4>
+<ul>
+  <li> <a href="file:///fturovic/Documents/workspace-2.x.x/carbidecpp/core/com.nokia.carbide.cpp.doc.user/html/tasks/start/carbide_overview.htm">Carbide.c++ Overview</a></li>
+</ul>
+<div id="footer">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></div>
+
+</body>
+</html>
\ No newline at end of file
--- a/core/com.nokia.carbide.cpp.doc.user/html/tasks/start/carbide_updating.htm	Fri Apr 24 10:31:21 2009 -0500
+++ b/core/com.nokia.carbide.cpp.doc.user/html/tasks/start/carbide_updating.htm	Mon Apr 27 15:07:35 2009 -0500
@@ -1,30 +1,50 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-<html>
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
-<meta http-equiv="Content-Style-Type" content="text/css" />
-<meta name="LASTUPDATED" content="06/17/05 11:09:43" />
-<title>Updating Carbide.c++</title>
-<link rel="StyleSheet" href="../../../book.css" type="text/css"/>
-<style type="text/css">
-<!--
-.style2 {color: #FF0000}
--->
-</style>
-</head>
-<body bgcolor="#FFFFFF">
-<h2>Updating Carbide.c++</h2>
-<p>Updates to Carbide.c++ current features are available using the Software Updates feature. </p>
-<p>Carbide is a collection of difference software projects combined into a working  environment for Symbian OS C/C++ development. At its base Carbide uses Eclipse and  CDT projects from Eclipse.org. We then modify some of these base plug-ins to work with our Carbide plug-ins. This is important for you to know as any updates to those modified base plug-ins may cause Carbide to not work as intended. </p>
-<p class="note"><span class="style2"><b>IMPORTANT</b> We recommend that you  not install any updates for Carbide.c++ features except for those provided by Nokia via Software Update. Replacing any standard Eclipse plugin with an updated version from a non-Nokia update site  can result in Carbide.c++ no longer working as intended.</span></p>
-<p>Select <b>Help &gt; Software Updates &gt; Find and Install...</b> to display the Install/Update dialog. Select &quot;Search for new features to install&quot; and click Next.</p>
-<p align="center"><img src="images/update_features.png" width="528" height="327" /></p>
-<p class="figure">Figure 1 - Install/Update Dialog </p>
-<p>Select the <b>Carbide.c++ Update Site</b> option and click <b>Finish</b>.</p>
-<p align="center"><img src="images/update_features2.png" width="528" height="586" /></p>
-<p class="figure">Figure 2 - Update Sites </p>
-<p>For more information visit the Carbide site online at <a href="http://www.forum.nokia.com/main/resources/tools_and_sdks/carbide_cpp/">http://www.forum.nokia.com/main/resources/tools_and_sdks/carbide_cpp/</a>.</p>
-<div id="footer">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></div>
-
-</body>
-</html>
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
+<meta http-equiv="Content-Style-Type" content="text/css" />
+<meta name="LASTUPDATED" content="06/17/05 11:09:43" />
+<title>Updating Carbide.c++</title>
+<link rel="StyleSheet" href="../../../book.css" type="text/css"/>
+<style type="text/css">
+<!--
+.style2 {color: #FF0000}
+-->
+</style>
+</head>
+<body bgcolor="#FFFFFF">
+<h2>Updating Carbide.c++</h2>
+<p>Updates to Carbide.c++ current features are available using the <b>Software Updates</b> feature. </p>
+<p>Carbide is a collection of difference software projects combined into a working  environment for Symbian OS C/C++ development. At its base Carbide uses Eclipse and  CDT projects from <a href="http://www.eclipse.org/">Eclipse.org</a>. We then modify some of these base plug-ins to work with our Carbide plug-ins. This is important for you to know as any updates to those modified base plug-ins may cause Carbide to not work as intended. </p>
+<p class="note"><span class="style2"><b>IMPORTANT</b> We recommend that you  not install any updates for Carbide.c++ features except for those provided by Nokia via Software Update. Replacing any standard Eclipse plugin with an updated version from a non-Nokia update site  can result in Carbide.c++ no longer working as intended.</span></p>
+<div class="step">
+  <h4>Installing Carbide Updates</h4>
+  <ol>
+    <li>Select <b class="step">Help &gt; Software Updates &gt; Find and Install...</b> to display the Install/Update dialog. Select &quot;Search for new features to install&quot; and click Next.
+  <p align="center"><img src="images/update_features.png" width="528" height="327" /></p>
+  <p class="figure">Figure 1 - Install/Update Dialog </p></li>
+  <li>Select the <b>Carbide.c++ Update Site</b> option and click <b>Finish</b>.
+  <p align="center"><img src="images/update_features2.png" width="600" height="419" /></p>
+  <p class="figure">Figure 2 - Update Sites </p></li>
+  <li>Select the <b>Carbide.c++ features to install, then click Next</b>
+    <p align="center"><img src="images/update_features3.png" width="600" height="482" /></p>
+  <p class="figure">Figure 3 - Search results showing Carbide features available</p>
+  </li>
+  <li>Accept with the license 
+    terms and click Next.
+    <p align="center"><img src="images/update_features4.png" width="600" height="482" /></p>
+  <p class="figure">Figure 4 - Update Sites </p></li>
+  <li>Select where the new feature should be installed, then  click <b>Finish</b>.
+    <p align="center"><img src="images/update_features5.png" width="600" height="482" /></p>
+  <p class="figure">Figure 5 - Update Sites </p></li>
+  </ol>
+</div>
+<p>Carbide downloads the selected features and installs them. You may need to relaunch Carbide.c++ to access the newly installed capabilities.</p>
+<h4>References</h4>
+<ul>
+  <li> <a href="carbide_overview.htm">Carbide.c++ Overview</a></li>
+</ul>
+<div id="footer">Copyright &copy; 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. <br>License: <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a></div>
+
+</body>
+</html>
Binary file core/com.nokia.carbide.cpp.doc.user/html/tasks/start/images/update_features2.png has changed
Binary file core/com.nokia.carbide.cpp.doc.user/html/tasks/start/images/update_features3.png has changed
Binary file core/com.nokia.carbide.cpp.doc.user/html/tasks/start/images/update_features4.png has changed
Binary file core/com.nokia.carbide.cpp.doc.user/html/tasks/start/images/update_features5.png has changed
--- a/core/com.nokia.carbide.cpp.doc.user/index.xml	Fri Apr 24 10:31:21 2009 -0500
+++ b/core/com.nokia.carbide.cpp.doc.user/index.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -1,761 +1,757 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?NLS TYPE="org.eclipse.help.index"?>
-<index>
-
-<!-- A -->
-
-    <entry keyword="Active Build Configuration">
-       <topic href="html/concepts/build_configurations.htm"/>
-    </entry>
-
-    <entry keyword="AIF">
-		<topic label="editor"	href="html/reference/AIFEditor.html"/>
-    	<topic label="file"		href="html/concepts/AIFDefWizard.html"/>
-	</entry>
-
-    <entry keyword="ARM registers">
-       <topic href="html/concepts/arm_registers.htm"/>
-	</entry>
-
-    <entry keyword="Attaching to a Symbian OS Process ">
-	   <topic href="html/tasks/processes/attach_debugger_to_process.htm" label="Attaching debugger to Symbian OS Process"/>
-	</entry>
-
-<!-- B -->
-
-	<entry keyword="Bitmaps (Importing)">
-	   <topic href="html/reference/wnd_import_bitmaps.htm"/>
-	</entry>
-
-	<entry keyword="Bluetooth setup">
-	   <topic href="html/tasks/trk/trk_connection_bluetooth.htm" label="TRK"/>
-	</entry>
-	
-    <entry keyword="Breakpoints">
-       <topic href="html/concepts/breakpoints.htm"/>
-    </entry>
-
-	<entry keyword="breakpoints">
-	   <topic href="html/tasks/breakpoints/pgm_bp_disable.htm" label="Disabling"/>
-	   <topic href="html/tasks/breakpoints/pgm_bp_enable.htm" label="Enabling"/>
-	   <topic href="html/tasks/breakpoints/pgm_bp_exporting.htm" label="Export Breakpoints"/>	   
-	   <topic href="html/tasks/breakpoints/pgm_bp_importing.htm" label="Import Breakpoints"/>
-	   <topic href="html/tasks/breakpoints/pgm_bp_clearing.htm" label="Removing"/>
-	   <topic href="html/tasks/breakpoints/save_breakpoints_view.htm" label="Saving Contents of Breakpoints View"/>
-	   <topic href="html/tasks/breakpoints/pgm_bp_setting.htm" label="Setting"/>
-	   <topic href="html/tasks/breakpoints/pgm_bp_conditional.htm" label="Setting Conditional Breakpoints or Watchpoints"/>
-	   <topic href="html/tasks/breakpoints/show_breakpoints_view.htm" label="Show list of Breakpoints"/>
-	   <topic href="html/tasks/breakpoints/pgm_bp_temporary.htm" label="Temporary Breakpoints"/>
-	   <topic href="html/tasks/breakpoints/pgm_bp_view_props.htm" label="Viewing Properties"/>
-	</entry>
-
-	<!--
-    <entry keyword="Breakpoint templates">
-       <topic href="html/concepts/working_with_bp_templates.htm"/>
-    </entry>
-	-->
-	
-	<entry keyword="Breakpoints view">
-	   <topic href="html/reference/view_breakpoints.htm"/>
-	</entry>
-
-	<entry keyword="Build preference panel">
-	   <topic href="html/reference/wnd_build_prefs.htm"/>
-	</entry>
-
-    <entry keyword="Build All Targets">
-       <topic href="html/reference/menus/build_all_targets.htm"/>
-    </entry>
-
-    <entry keyword="Build Target Only">
-		<topic href="html/reference/menus/build_target.htm" />
-    </entry>
-
-	<entry keyword="build configuration">
-	   <topic href="html/concepts/build_configurations.htm" />
-	   <topic href="html/tasks/projects/prj_new_build_config.htm" />
-	   <topic href="html/tasks/projects/prj_set_build_tgt.htm" />
-	</entry>
-
-    <entry keyword="Build PKG File">
-       <topic href="html/reference/menus/build_pkg_file.htm"/>
-    </entry>
-
-    <entry keyword="Build Symbian Component">
-       <topic href="html/reference/menus/build_symbian_comp.htm"/>
-    </entry>
-
-    <entry keyword="Build Targets">
-       <topic href="html/concepts/build_targets.htm"/>
-    </entry>
-
-	<entry keyword="Building Projects">
-	   <topic href="html/tasks/projects/prj_build.htm"/>
-	</entry>
-
-<!-- C -->
-
-	<entry keyword="Carbide.c++ News View">
-		<topic href="html/reference/view_carbide_news.htm" />
-		<topic href="html/reference/prefs_carbide_news.htm" />
-	</entry>
-
-	<entry keyword="C/C++ Projects View">
-	   <topic href="html/reference/view_cpp_projects.htm"/>
-	</entry>
-
-	<entry keyword="Carbide">
-       <topic label="build configurations"		href="html/reference/build_properties/pane_build_config.htm"/>
-       <topic label="project settings"			href="html/reference/build_properties/pane_project_settings.htm"/>
-	</entry>
-
-
-	<entry keyword="Carbide.c++ Debugger">
-	   <topic href="html/concepts/debugger_about.htm"/>
-	</entry>
-
-	<entry keyword="Carbide.c++ Perspective">
-	   <topic href="html/concepts/SymbianPerspective.html"/>
-	</entry>
-
-	<entry keyword="clean">
-	   <topic href="html/reference/wnd_build_prefs.htm"/>
-	   <topic href="html/tasks/projects/prj_clean.htm"/>
-       <topic href="html/reference/menus/clean_symbian_comp.htm"/>
-	</entry>
-
-
-	<entry keyword="Command-Line Tools">
-	   <topic href="html/tasks/projects/prj_build_cmd_line.htm"/>
-	</entry>
-
-	<entry keyword="Common Debugging Actions">
-	   <topic href="html/concepts/common_debug_actions.htm"/>
-	</entry>
-
-	<entry keyword="Compile Source">
-	   <topic href="html/reference/menus/compile_source.htm"/>
-	</entry>
-
-	<entry keyword="Concurrent Versions System">
-	   <topic href="html/concepts/cvs.htm"/>
-	</entry>
-
-	<entry keyword="Connection Pane">
-	   <topic href="html/reference/trk/panel_trk_connection.htm"/>
-	</entry>
-
-	<entry keyword="Console View">
-	   <topic href="html/reference/view_log.htm"/>
-	</entry>
-
-	<entry keyword="Context Menus">
-	   <topic href="html/concepts/contextual_menus.htm"/>
-	</entry>
-
-	<entry keyword="concurrent builds">
-	   <topic href="html/reference/wnd_build_prefs.htm"/>
-	</entry>
-
-	<entry keyword="Controlling Program Execution">
-	   <topic href="html/concepts/working_with_programs.htm"/>
-	</entry>
-
-	<entry keyword="creating">
-       <topic label="AIF files"		href="html/tasks/AppInfoFile.html" />
-       <topic label="MBM files"		href="html/tasks/Multi-BitmapFile.html" />
-	   <topic label="projects"		href="html/tasks/CreatingNewProjects.html"/>
-       <topic label="SIS files"		href="html/tasks/projects/prj_creating_sis_file.htm"/>
-       <topic href="html/qt_help/qt_creating_projs_01.htm"/>
-	</entry>
-
-
-<!-- D -->
-	
-	<!--
-	<entry keyword="Data Viewer Plug-ins">
-	   <topic href="html/concepts/data_viewer_plugins.htm"/>
-	</entry>
-	-->
-	
-	<entry keyword="Debug Preferences">
-	   <topic href="html/reference/wnd_debugger_prefs.htm"/>
-	</entry>
-
-	<entry keyword="debugger">
-	   <topic href="html/concepts/working_with_data.htm" label="Working with Debugger Data"/>
-	   <topic href="html/reference/launch_configs/emulator_debugger.htm" />
-	   <topic href="html/reference/launch_configs/page_trk_debugger.htm"/>
-	   <topic href="html/reference/debugger_settings.htm" label="Debugger Settings"/>
-	</entry>
-	
-	<entry keyword="debugging">
-	   <topic label="Debugging a Program" href="html/tasks/debugger/work_debug_act_debug.htm" />
-	   <topic label="Debugging Applications" href="html/tasks/projects/prj_debug_console.htm" />
-	   <topic href="html/tasks/projects/prj_debug_dlls.htm"/>
-	   <topic label="Debugging Multiple Projects" href="html/tasks/projects/prj_debug_multiple_projects.htm" />
-	   <topic href="html/tasks/start/carbide_debugging.htm" />
-	</entry>
-
-    <entry keyword="Debugging in ROM">
-       <topic href="html/tasks/projects/prj_debug_rom.htm"/>
-	</entry>
-
-	<entry keyword="debug agent">
-	   <topic href="html/concepts/trk.htm"/>
-	   <topic href="html/tasks/trk/trk_overview.htm"/>
-	   <topic href="html/tasks/trk/trk_install_pcsuite.htm"/>
-	   <topic href="html/tasks/trk/trk_install_bluetooth.htm"/>
-	   <topic href="html/tasks/trk/trk_install_usb.htm"/>
-	</entry>
-
-	<entry keyword="Debug Perspective">
-	   <topic href="html/reference/perspective_debug.htm"/>
-	</entry>
-
-	<entry keyword="Debug view">
-	   <topic href="html/reference/view_debug.htm"/>
-	</entry>
-
-	<entry keyword="Debug window">
-	   <topic href="html/reference/wnd_debug_configuration.htm"/>
-	   <topic href="html/concepts/launch_configuration.htm"/>
-	   <topic href="html/tasks/projects/wiz_new_launch_config.htm"/>
-	</entry>
-
-	<entry keyword="dependency tracking">
-	   <topic href="html/reference/wnd_build_prefs.htm"/>
-	</entry>
-
-	<entry keyword="Disassembly view">
-	   <topic href="html/reference/view_disassembly.htm"/>
-	</entry>
-
-	<entry keyword="DLL">
-	   <topic href="html/tasks/projects/prj_debug_dlls.htm"/>
-	   <topic href="html/concepts/SampleExampleProjectCreate.html"/>
-	   <topic label="example" 		href="html/concepts/SampleExampleProjectCreate.html"/>
-	</entry>	
-
-<!-- E -->
-
-	<entry keyword="emulator">
-	   <topic href="html/concepts/emulators.htm"/>
-	   <topic href="html/reference/wnd_build_prefs.htm"/>
-	</entry>	
-
-    <entry keyword="Environment variables">
-       <topic href="html/reference/build_properties/pane_build_config_env.htm"/>
-	</entry>
-
-	<entry keyword="Executables">
-	   <topic href="html/reference/trk/panel_trk_exes.htm"/>
-	</entry>
-
-	<entry keyword="External Build">
-	   <topic href="html/concepts/ext_build_support.htm"/>
-	</entry>
-
-	<entry keyword="Expressions">
-	   <topic href="html/tasks/expressions/expr_adding.htm" label="Adding"/>
-	   <topic href="html/tasks/expressions/expr_editing.htm" label="Editing"/>
-	   <topic href="html/tasks/expressions/expr_removing.htm" label="Removing"/>
-	</entry>
-
-	<entry keyword="Expressions view">
-	   <topic href="html/reference/view_expressions.htm"/>
-	</entry>
-
-	<entry keyword="Executables view">
-	   <topic href="html/reference/view_executables.htm"/>
-	</entry>
-
-
-<!-- F -->
-
-	<entry keyword="File Transfer Pane">
-	   <topic href="html/reference/trk/panel_trk_file_transfer.htm"/>
-	</entry>
-
-	<entry keyword="FPU Registers">
-	   <topic href="html/concepts/fpu_registers.htm"/>
-	</entry>
-
-	<entry keyword="Freezing DLL Projects">
-	   <topic href="html/tasks/projects/prj_freeze_def_file.htm"/>
-	</entry>
-
-<!-- G -->
-
-	<entry keyword="General Registers">
-	   <topic href="html/concepts/general_registers.htm"/>
-	</entry>
-
-	<entry keyword="Global Variables Window">
-	   <topic href="html/reference/view_global_variables.htm"/>
-	</entry>
-
-<!-- H -->
-
-	<entry keyword="HelloCarbide">
-	   <topic href="html/tasks/start/carbide_example.htm" label="First Application Example"/>
-	   <topic href="html/tasks/start/carbide_example_trk.htm" label="On-Device Run Mode Example"/>
-	</entry>
-
-	<entry keyword="Hints and Tips">
-	   <topic href="html/hints_tips.htm"/>
-	</entry>
-
-	<entry keyword="Host Registers">
-	   <topic href="html/concepts/host_registers.htm"/>
-	</entry>
-
-<!-- I -->
-
-	<entry keyword="Importing">
-	   <topic href="html/tasks/ImportingProjects.html"/>
-	   <topic href="html/tasks/projects/prj_import_exe.htm"/>
-       <topic href="html/qt_help/qt_importing_projs_01.htm"/>
-	</entry>
-
-	<entry keyword="INF Editor">
-	   <topic href="html/reference/INF_Editor.html" />
-	   <topic href="html/reference/INF_Editor_exports.html" />
-	   <topic href="html/reference/INF_Editor_file.html" />
-	   <topic href="html/reference/INF_Editor_addedit_make.html" />
-	   <topic href="html/reference/INF_Editor_addedit_mmp.html" />
-	</entry>
-
-	<entry keyword="installation">
-	   <topic href="html/tasks/start/carbide_install.htm"/>
-	   <topic href="html/tasks/trk/trk_install_pcsuite.htm"/>
-	   <topic href="html/tasks/trk/trk_install_bluetooth.htm"/>
-	   <topic href="html/tasks/trk/trk_install_usb.htm"/>
-	</entry>
-
-	<entry keyword="Installation Pane">
-	   <topic href="html/reference/trk/panel_trk_installation.htm"/>
-	</entry>
-
-	<entry keyword="Installing On-device Debug Agents">
-	   <topic href="html/tasks/trk/trk_installation_instr.htm" label="Overview"/>
-	   <topic href="html/tasks/trk/trk_install_bluetooth.htm" label="Bluetooth"/>
-	   <topic href="html/tasks/trk/trk_install_usb.htm" label="USB"/>
-	</entry>
-
-<!-- J -->
-<!-- K -->
-<!-- L -->
-
-	<entry keyword="Launch Configuration">
-	   <topic href="html/concepts/launch_configuration.htm" label="Overview"/>
-	   <topic href="html/tasks/trk/trk_carbide_setup.htm" label="TRK Setup"/>
-	   <topic href="html/tasks/projects/prj_debug_config.htm" label="Creating"/>
-	</entry>
-
-	<entry keyword="Launch Configuration Filter">
-	   <topic href="html/reference/trk/panel_filter.htm"/>
-	</entry>
-
-	<entry keyword="Leavescan">
-	   <topic href="html/reference/leavescan_pref.html"/>
-	</entry>
-
-	<entry keyword="Leavescan Menu Command">
-	   <topic href="html/reference/menus/run_leavescan.htm"/>
-	</entry>
-
-	<entry keyword="License">
-	   <topic href="html/license.htm" label="Carbide Licenses"/>
-	</entry>
-
-	<entry keyword="License Information">
-	   <topic href="html/legal.htm"/>
-	</entry>
-
-<!-- M -->
-
-	<entry keyword="Main pane">
-	   <topic href="html/reference/launch_configs/emulator_main.htm"/>
-	   <topic href="html/reference/launch_configs/page_trk_main.htm"/>
-	</entry>
-
-	<entry keyword="MBM Editor">
-       <topic href="html/reference/MBMEditor.html"/>
-	</entry>
-
-	<entry keyword="MBM File">
-       <topic href="html/concepts/MBMDefWizard.html"/>
-	</entry>
-
-	<entry keyword="memory">
-	   <topic href="html/concepts/working_with_memory.htm" />
-	   <topic href="html/tasks/memory/memory_monitor_adding.htm" label="Adding memory monitor"/>
-	   <topic href="html/tasks/memory/memory_monitor_removing.htm" label="Removing memory monitor"/>
-	   <topic href="html/tasks/memory/memory_rendering_adding.htm" label="Adding memory rendering pane"/>
-	   <topic href="html/tasks/memory/view_memory_show.htm" label="Opening memory view"/>
-	</entry>
-
-	<entry keyword="Memory Rendering Options">
-	   <topic href="html/reference/memory_rendering_options.htm"/>
-	</entry>
-
-	<entry keyword="Memory view">
-	   <topic href="html/reference/view_memory_wnd.htm"/>
-	</entry>
-
-	<entry keyword="menus">
-	   <topic href="html/reference/menus/new_symbian_class.htm" />
-	   <topic label="Symbian OS C++ Project" href="html/reference/menus/new_symbian_project.htm" />
-	   <topic href="html/reference/menus/open_cmd_window.htm" />
-	   <topic href="html/reference/menus/open_explorer_window.htm" />
-	   <topic href="html/reference/menus/s60_ui_designer.htm"/>
-		<topic href="html/reference/menus/run_codescanner.htm" />
-
-		<topic href="html/tasks/projects/prj_preprocess.htm" />
-
-		<topic href="html/tasks/projects/prj_build.htm" />
-		<topic href="html/tasks/projects/prj_clean.htm" />
-	
-		<topic href="html/reference/menus/build_all_targets.htm" />
-		<topic href="html/reference/menus/compile_source.htm" />		
-	
-		<topic href="html/reference/menus/build_symbian_comp.htm" />
-		<topic href="html/reference/menus/clean_symbian_comp.htm" />
-		<topic href="html/reference/menus/freeze_symbian_comp.htm" />
-	
-		<topic href="html/reference/menus/build_pkg_file.htm" />
-		<topic href="html/reference/ROM_build_settings.html" />
-
-   		<topic href="html/reference/menus/freeze_exports.htm" />
-	</entry>
-
-
-	<entry keyword="MIF Editor">
-	   <topic href="html/reference/view_mifdef_editor.htm"/>
-	</entry>
-
-	<entry keyword="MMP Editor">
-	   <topic href="html/reference/MMP_Editor.html" label="MMP Editor" />
-	   <topic href="html/reference/MMP_Editor_sources.html" label="Sources tab"/>
-	   <topic href="html/reference/MMP_Editor_libraries.html" label="Libraries tab"/>
-	   <topic href="html/reference/MMP_Editor_options.html" label="Options tab"/>
-	   <topic href="html/reference/MMP_Editor_mmp_tab.html" label="MMP File tab"/>
-	   <topic href="html/reference/MMP_Editor_resource_block.html" label="Resource Block"/>
-	</entry>
-	
-	<entry keyword="MMP Files">
-	   <topic href="html/concepts/mmpfiles.htm"/>
-	</entry>
-
-	<entry keyword="MMP Wizard">
-	   <topic href="html/reference/NewMMP_wizard.html"/>
-	</entry>
-
-	<entry keyword="Modify">
-	   <topic href="html/concepts/Modify.html"/>
-	</entry>
-
-	<entry keyword="Modifying Resources">
-	   <topic href="html/tasks/ModifyingResources.html"/>
-	</entry>
-
-	<entry keyword="Modules View">
-	   <topic href="html/reference/view_module_wnd.htm"/>
-	</entry>
-
-	<entry keyword="Multi-core Debugging">
-	   <topic href="html/concepts/work_mcore_debug.htm"/>
-	</entry>
-
-<!-- N -->
-<!-- O -->
-
-   <entry keyword="On-device Connections">
-   		<topic href="html/reference/trk/wnd_new_connection_wizard.htm" />
-     	<topic href="html/reference/trk/view_remote_connection.htm" />
-		<topic href="html/reference/trk/wnd_new_conn_wiz_edit.htm"/>
-  		<topic href="html/reference/trk/exporting_remote_conns.htm" />
-	</entry>
-
-<!-- P -->
-
-	<entry keyword=".pkg file symbols">
-	   <topic href="html/concepts/symbols_pkg.htm"/>
-	</entry>
-
-	<entry keyword="PKG and SIS Files">
-	   <topic href="html/tasks/projects/working_with_sis_pkg_files.htm"/>
-	</entry>
-
-    <entry keyword="Platform Filtering Preferences">
-        <topic href="html/tasks/sdks/sdk_platform_filter.htm"/>
-    </entry>
-
-    <entry keyword="preferences">
-		<topic href="html/reference/wnd_build_prefs.htm" />
-		<topic href="html/reference/wnd_debugger_prefs.htm" />
-		<topic href="html/reference/prefs_carbide_news.htm" />
-		<topic href="html/reference/leavescan_pref.html" />
-		<topic href="html/tasks/sdks/sdk_platform_filter.htm" />
-		<topic href="html/reference/SDKPreferences.html" />
-    </entry>
-
-	<entry keyword="Processes">
-	   <topic href="html/tasks/processes/attach_debugger_to_process.htm" label="Attaching debugger to Symbian OS Process"/>
-	</entry>
-
-    <entry keyword="Projects">
-       <topic href="html/concepts/Projects.html"/>
-       <topic href="html/qt_help/qt_creating_projs_01.htm"/>
-       <topic href="html/qt_help/qt_importing_projs_01.htm"/>
-	</entry>
-
-    <entry keyword="Project and File Properties">
-	   <topic href="html/reference/ProjectPreferences.html"/>
-	</entry>
-
-	<entry keyword="Project Dependencies">
-	   <topic href="html/tasks/projects/prj_build_multi_projects.htm"/>
-	</entry>
-
-    <entry keyword="Project Updater">
-	   <topic href="html/reference/olderproject_updater.html"/>
-	</entry>
-
-
-<!-- Q -->
-
-    <entry keyword="Qt">
-       <topic href="html/qt_help/qt_creating_projs_01.htm"/>
-       <topic href="html/qt_help/qt_importing_projs_01.htm"/>
-       <topic href="html/qt_help/qt_perspectives.htm"/>
-       <topic href="html/qt_help/qt_pref_panel.htm"/>
-       <topic href="html/qt_help/qt_project_properties.htm"/>
-	</entry>
-
-<!-- R -->
-
-	<entry keyword="register">
-	   <topic href="html/tasks/start/carbide_register.htm"/>
-	</entry>
-
-	<entry keyword="registers">
-	   <topic href="html/concepts/registers.htm" label="Overview"/>
-	   <topic href="html/tasks/registers/mem_reg_changing.htm" label="Changing Values"/>
-	   <topic href="html/tasks/registers/mem_reg_data_views.htm" label="Changing Data Views"/>
-	   <topic href="html/tasks/registers/mem_reg_open_wnd.htm" label="Opening Registers View"/>
-	   <topic href="html/tasks/registers/mem_reg_viewing.htm" label="Expanding Groups"/>
-	</entry>
-
-	<entry keyword="Registers Details Window">
-	   <topic href="html/reference/view_reg_details.htm"/>
-	</entry>
-
-	<entry keyword="Registers View">
-	   <topic href="html/reference/view_registers.htm"/>
-	</entry>
-
-	<entry keyword="Restarting Debugger">
-	   <topic href="html/tasks/debugger/work_debug_act_restart.htm"/>
-	</entry>
-
-	<entry keyword="Resuming Program Execution">
-	   <topic href="html/tasks/debugger/work_debug_act_resume.htm"/>
-	</entry>
-
-	<entry keyword="Requirements">
-	   <topic href="html/tasks/start/carbide_requirements.htm"/>
-	</entry>
-
-	<entry keyword="ROM Build Settings">
-	   <topic href="html/reference/ROM_build_settings.html"/>
-	</entry>
-
-	<entry keyword="Running a Program">
-	   <topic href="html/tasks/debugger/work_debug_act_run.htm"/>
-	</entry>
-
-<!-- S -->
-
-	<entry keyword="SDKs">
-	   <topic href="html/tasks/sdks/sdk_add.htm" />
-	   <topic href="html/tasks/sdks/sdk_add_custkits.htm" label="Adding Symbian Custom Kits"/>
-	   <topic href="html/tasks/sdks/sdk_search.htm" label="Searching"/>
-	   <topic href="html/tasks/sdks/sdk_view_properties.htm" label="Viewing Properties"/>
-       <topic href="html/qt_help/qt_pref_panel.htm"/>
-	</entry>
-
-	<entry keyword="SDK Preferences">
-	   <topic href="html/reference/SDKPreferences.html"/>
-       <topic href="html/qt_help/qt_pref_panel.htm"/>
-	</entry>
-
-	<entry keyword="SDK Support">
-	   <topic href="html/concepts/SDKSupport.html"/>
-	   <topic href="html/tasks/AddinganSDK.html" />
-	   <topic href="html/tasks/WorkingwithSDKs.html"/>
-	   <topic href="html/tasks/RmvngandVwngPropsosSDK.html" label="Viewing and Editing SDK Properties"/>
-	</entry>
-
-	<entry keyword="SIS File">
-	   <topic href="html/tasks/start/carbide_deploying.htm" label="Uploading"/>
-	</entry>
-
-	<entry keyword="Sophia Target Interface Stop Mode Debugging">
-	   <topic href="html/reference/wnd_sophia_config.htm"/>
-	</entry>
-
-	<entry keyword="Starting the Debugger">
-	   <topic href="html/tasks/debugger/work_debug_act_start.htm"/>
-	</entry>
-
-	<entry keyword="Step Into">
-	   <topic href="html/tasks/debugger/work_debug_act_stepinto.htm"/>
-	</entry>
-
-	<entry keyword="Step Over">
-	   <topic href="html/tasks/debugger/work_debug_act_stepover.htm"/>
-	</entry>
-
-	<entry keyword="Step Return">
-	   <topic href="html/tasks/debugger/work_debug_act_stepout.htm"/>
-	</entry>
-
-	<entry keyword="Stop Debug Session">
-	   <topic href="html/tasks/debugger/work_debug_act_stop.htm"/>
-	</entry>
-
-	<entry keyword="Stop Mode Debugging">
-	   <topic href="html/tasks/debugger/stop_mode_debug_precond.htm" label="Stop Mode Debugging"/>
-	</entry>
-
-	<entry keyword="Symbian OS Classes">
-	   <topic href="html/tasks/projects/prj_adding_symbian_class.htm" label="Adding"/>
-	</entry>
-
-	<entry keyword="Symbian OS Data View">
-	   <topic href="html/reference/view_symbian_kernel.htm"/>
-	   <topic href="html/tasks/debugger/view_symbian_kernel_set.htm" />
-	</entry>
-
-    <entry keyword="Symbian OS SDKs">
-	   <topic href="html/reference/ProjectTypeandSDK.html"/>
-	</entry>
-
-    <entry keyword="Symbian Project Navigator">
-       <topic href="html/reference/view_sym_proj_nav.htm"/>
-    </entry>
-   
-	<entry keyword="Symbol Hint">
-	   <topic href="html/concepts/symbol_hints.htm"/>
-	</entry>
-
-	<entry keyword="Symbolics Files">
-	   <topic href="html/concepts/symbolic_files_about.htm"/>
-	</entry>
-
-	<entry keyword="System Browser View">
-	   <topic href="html/reference/view_system_browser.htm"/>
-	</entry>
-
-<!-- T -->
-
-	<entry keyword="templates">
-	   <topic href="html/concepts/templates.htm"/>
-	</entry>
-
-	<entry keyword="Terminate Program">
-	   <topic href="html/tasks/debugger/work_debug_act_kill.htm"/>
-	</entry>
-
-	<entry keyword="test components">
-	   <topic href="html/reference/wnd_build_prefs.htm"/>
-	</entry>
-
-	<entry keyword="Thread Breakpoint">
-	   <topic href="html/concepts/thread_cond_breakpoints.htm"/>
-	</entry>
-
-	<entry keyword="Trace32 Interface for Stop Mode Debugging">
-	   <topic href="html/reference/wnd_Trace32_config.htm"/>
-	</entry>
-
-	<entry keyword="TRK" >
-		<topic href="html/concepts/trk.htm"/>
-		<topic href="html/tasks/trk/trk_overview.htm"/>
-		<topic href="html/tasks/trk/trk_carbide_setup.htm" />
-		<topic href="html/tasks/start/carbide_example_trk.htm" />
-		<topic href="html/tasks/debugger/stop_mode_debug.htm" />
-	</entry>
-	
-
-	<entry keyword="TRK Pane">
-	   <topic href="html/reference/trk/panel_trk_overview.htm"/>
-	</entry>
-
-<!-- U -->
-
-	<entry keyword="updating">
-	   <topic label="Carbide.c++"	href="html/tasks/start/carbide_updating.htm"/>
-	   <topic label="projects"		href="html/reference/olderproject_updater.html"/>
-	</entry>
-
-	<entry keyword="USB setup">
-	   <topic href="html/tasks/trk/trk_connection_usb.htm" label="TRK"/>
-	</entry>
-
-<!-- V -->
-
-	<entry keyword="variables">
-	   <topic href="html/concepts/working_with_variables.htm" />
-	   <topic href="html/tasks/variables/set_variable_formats.htm" />
-	   <topic href="html/tasks/variables/show_global_variables.htm" />
-	   <topic href="html/tasks/variables/show_variables_view.htm" />
-	</entry>
-
-	<entry keyword="Variables view">
-	   <topic href="html/reference/view_variables.htm"/>
-	</entry>
-
-	<entry keyword="views">
-		<topic href="html/reference/view_breakpoints.htm" />
-		<topic href="html/reference/view_log.htm" />
-		<topic href="html/reference/view_carbide_news.htm" />
-		<topic href="html/reference/view_debug.htm" />
-		<topic href="html/reference/view_disassembly.htm" />
-		<topic href="html/reference/view_executables.htm" />
-		<topic href="html/reference/view_expressions.htm" />
-		<topic href="html/reference/view_memory_wnd.htm" />
-		<topic href="html/reference/view_module_wnd.htm" />
-	    <topic href="html/concepts/registers.htm" />
-	    <topic href="html/reference/view_symbian_kernel.htm" />
-	    <topic href="html/reference/view_variables.htm" />
-	</entry>
-
-
-<!-- W -->
-
-	<entry keyword="watchpoints">
-	   <topic label="Watchpoints" href="html/tasks/watchpoints/pgm_watchpoints.htm" />
-	   <topic href="html/tasks/watchpoints/pgm_wpt_clearing.htm" />
-	   <topic href="html/tasks/watchpoints/pgm_wpt_conditional.htm" />
-	   <topic href="html/tasks/watchpoints/pgm_wpt_disable.htm" />
-	   <topic href="html/tasks/watchpoints/pgm_wpt_enable.htm" />
-	   <topic href="html/tasks/watchpoints/pgm_wpt_setting.htm" />
-	   <topic href="html/tasks/watchpoints/pgm_wpt_view_props.htm" />
-	</entry>
-
-    <entry keyword="workspaces">
-	   <topic href="html/concepts/workspaces.htm"/>
-	</entry>
-
-<!-- X -->
-
-	<entry keyword="x86 Exceptions Pane">
-	   <topic href="html/reference/launch_config/emulator_exceptions.htm"/>
-	</entry>
-
-<!-- Y -->
-<!-- Z -->
-</index>
+<?xml version="1.0" encoding="UTF-8"?>
+<?NLS TYPE="org.eclipse.help.index"?>
+<index>
+
+<!-- A -->
+
+    <entry keyword="Active Build Configuration">
+       <topic href="html/concepts/build_configurations.htm"/>
+    </entry>
+
+    <entry keyword="AIF">
+		<topic label="editor"	href="html/reference/AIFEditor.html"/>
+    	<topic label="file"		href="html/concepts/AIFDefWizard.html"/>
+	</entry>
+
+    <entry keyword="ARM registers">
+       <topic href="html/concepts/arm_registers.htm"/>
+	</entry>
+
+    <entry keyword="Attaching to a Symbian OS Process ">
+	   <topic href="html/tasks/processes/attach_debugger_to_process.htm" label="Attaching debugger to Symbian OS Process"/>
+	</entry>
+
+<!-- B -->
+
+	<entry keyword="Bitmaps (Importing)">
+	   <topic href="html/reference/wnd_import_bitmaps.htm"/>
+	</entry>
+
+	<entry keyword="Bluetooth setup">
+	   <topic href="html/tasks/trk/trk_connection_bluetooth.htm" label="TRK"/>
+	</entry>
+	
+    <entry keyword="Breakpoints">
+       <topic href="html/concepts/breakpoints.htm"/>
+    </entry>
+
+	<entry keyword="breakpoints">
+	   <topic href="html/tasks/breakpoints/pgm_bp_disable.htm" label="Disabling"/>
+	   <topic href="html/tasks/breakpoints/pgm_bp_enable.htm" label="Enabling"/>
+	   <topic href="html/tasks/breakpoints/pgm_bp_exporting.htm" label="Export Breakpoints"/>	   
+	   <topic href="html/tasks/breakpoints/pgm_bp_importing.htm" label="Import Breakpoints"/>
+	   <topic href="html/tasks/breakpoints/pgm_bp_clearing.htm" label="Removing"/>
+	   <topic href="html/tasks/breakpoints/save_breakpoints_view.htm" label="Saving Contents of Breakpoints View"/>
+	   <topic href="html/tasks/breakpoints/pgm_bp_setting.htm" label="Setting"/>
+	   <topic href="html/tasks/breakpoints/pgm_bp_conditional.htm" label="Setting Conditional Breakpoints or Watchpoints"/>
+	   <topic href="html/tasks/breakpoints/show_breakpoints_view.htm" label="Show list of Breakpoints"/>
+	   <topic href="html/tasks/breakpoints/pgm_bp_temporary.htm" label="Temporary Breakpoints"/>
+	   <topic href="html/tasks/breakpoints/pgm_bp_view_props.htm" label="Viewing Properties"/>
+	</entry>
+
+	<!--
+    <entry keyword="Breakpoint templates">
+       <topic href="html/concepts/working_with_bp_templates.htm"/>
+    </entry>
+	-->
+	
+	<entry keyword="Breakpoints view">
+	   <topic href="html/reference/view_breakpoints.htm"/>
+	</entry>
+
+	<entry keyword="Build preference panel">
+	   <topic href="html/reference/wnd_build_prefs.htm"/>
+	</entry>
+
+    <entry keyword="Build All Targets">
+       <topic href="html/reference/menus/build_all_targets.htm"/>
+    </entry>
+
+    <entry keyword="Build Target Only">
+		<topic href="html/reference/menus/build_target.htm" />
+    </entry>
+
+	<entry keyword="build configuration">
+	   <topic href="html/concepts/build_configurations.htm" />
+	   <topic href="html/tasks/projects/prj_new_build_config.htm" />
+	   <topic href="html/tasks/projects/prj_set_build_tgt.htm" />
+	</entry>
+
+    <entry keyword="Build PKG File">
+       <topic href="html/reference/menus/build_pkg_file.htm"/>
+    </entry>
+
+    <entry keyword="Build Symbian Component">
+       <topic href="html/reference/menus/build_symbian_comp.htm"/>
+    </entry>
+
+    <entry keyword="Build Targets">
+       <topic href="html/concepts/build_targets.htm"/>
+    </entry>
+
+	<entry keyword="Building Projects">
+	   <topic href="html/tasks/projects/prj_build.htm"/>
+	</entry>
+
+<!-- C -->
+
+	<entry keyword="Carbide.c++ News View">
+		<topic href="html/reference/view_carbide_news.htm" />
+		<topic href="html/reference/prefs_carbide_news.htm" />
+	</entry>
+
+	<entry keyword="C/C++ Projects View">
+	   <topic href="html/reference/view_cpp_projects.htm"/>
+	</entry>
+
+	<entry keyword="Carbide">
+       <topic label="build configurations"		href="html/reference/build_properties/pane_build_config.htm"/>
+       <topic label="project settings"			href="html/reference/build_properties/pane_project_settings.htm"/>
+	</entry>
+
+
+	<entry keyword="Carbide.c++ Debugger">
+	   <topic href="html/concepts/debugger_about.htm"/>
+	</entry>
+
+	<entry keyword="Carbide.c++ Perspective">
+	   <topic href="html/concepts/SymbianPerspective.html"/>
+	</entry>
+
+	<entry keyword="clean">
+	   <topic href="html/reference/wnd_build_prefs.htm"/>
+	   <topic href="html/tasks/projects/prj_clean.htm"/>
+       <topic href="html/reference/menus/clean_symbian_comp.htm"/>
+	</entry>
+
+
+	<entry keyword="Command-Line Tools">
+	   <topic href="html/tasks/projects/prj_build_cmd_line.htm"/>
+	</entry>
+
+	<entry keyword="Common Debugging Actions">
+	   <topic href="html/concepts/common_debug_actions.htm"/>
+	</entry>
+
+	<entry keyword="Compile Source">
+	   <topic href="html/reference/menus/compile_source.htm"/>
+	</entry>
+
+	<entry keyword="Concurrent Versions System">
+	   <topic href="html/concepts/cvs.htm"/>
+	</entry>
+
+	<entry keyword="Connection Pane">
+	   <topic href="html/reference/trk/panel_trk_connection.htm"/>
+	</entry>
+
+	<entry keyword="Console View">
+	   <topic href="html/reference/view_log.htm"/>
+	</entry>
+
+	<entry keyword="Context Menus">
+	   <topic href="html/concepts/contextual_menus.htm"/>
+	</entry>
+
+	<entry keyword="concurrent builds">
+	   <topic href="html/reference/wnd_build_prefs.htm"/>
+	</entry>
+
+	<entry keyword="Controlling Program Execution">
+	   <topic href="html/concepts/working_with_programs.htm"/>
+	</entry>
+
+	<entry keyword="creating">
+       <topic label="AIF files"		href="html/tasks/AppInfoFile.html" />
+       <topic label="MBM files"		href="html/tasks/Multi-BitmapFile.html" />
+	   <topic label="projects"		href="html/tasks/CreatingNewProjects.html"/>
+       <topic label="SIS files"		href="html/tasks/projects/prj_creating_sis_file.htm"/>
+       <topic href="html/qt_help/qt_creating_projs_01.htm"/>
+	</entry>
+
+
+<!-- D -->
+	
+	<!--
+	<entry keyword="Data Viewer Plug-ins">
+	   <topic href="html/concepts/data_viewer_plugins.htm"/>
+	</entry>
+	-->
+	
+	<entry keyword="Debug Preferences">
+	   <topic href="html/reference/wnd_debugger_prefs.htm"/>
+	</entry>
+
+	<entry keyword="debugger">
+	   <topic href="html/concepts/working_with_data.htm" label="Working with Debugger Data"/>
+	   <topic href="html/reference/launch_configs/emulator_debugger.htm" />
+	   <topic href="html/reference/launch_configs/page_trk_debugger.htm"/>
+	   <topic href="html/reference/debugger_settings.htm" label="Debugger Settings"/>
+	</entry>
+	
+	<entry keyword="debugging">
+	   <topic label="Debugging a Program" href="html/tasks/debugger/work_debug_act_debug.htm" />
+	   <topic label="Debugging Applications" href="html/tasks/projects/prj_debug_console.htm" />
+	   <topic href="html/tasks/projects/prj_debug_dlls.htm"/>
+	   <topic label="Debugging Multiple Projects" href="html/tasks/projects/prj_debug_multiple_projects.htm" />
+	   <topic href="html/tasks/start/carbide_debugging.htm" />
+	</entry>
+
+    <entry keyword="Debugging in ROM">
+       <topic href="html/tasks/projects/prj_debug_rom.htm"/>
+	</entry>
+
+	<entry keyword="debug agent">
+	   <topic href="html/concepts/trk.htm"/>
+	   <topic href="html/tasks/trk/trk_overview.htm"/>
+	   <topic href="html/tasks/trk/trk_install_pcsuite.htm"/>
+	   <topic href="html/tasks/trk/trk_install_bluetooth.htm"/>
+	   <topic href="html/tasks/trk/trk_install_usb.htm"/>
+	</entry>
+
+	<entry keyword="Debug Perspective">
+	   <topic href="html/reference/perspective_debug.htm"/>
+	</entry>
+
+	<entry keyword="Debug view">
+	   <topic href="html/reference/view_debug.htm"/>
+	</entry>
+
+	<entry keyword="Debug window">
+	   <topic href="html/reference/wnd_debug_configuration.htm"/>
+	   <topic href="html/concepts/launch_configuration.htm"/>
+	   <topic href="html/tasks/projects/wiz_new_launch_config.htm"/>
+	</entry>
+
+	<entry keyword="dependency tracking">
+	   <topic href="html/reference/wnd_build_prefs.htm"/>
+	</entry>
+
+	<entry keyword="Disassembly view">
+	   <topic href="html/reference/view_disassembly.htm"/>
+	</entry>
+
+	<entry keyword="DLL">
+	   <topic href="html/tasks/projects/prj_debug_dlls.htm"/>
+	   <topic href="html/concepts/SampleExampleProjectCreate.html"/>
+	   <topic label="example" 		href="html/concepts/SampleExampleProjectCreate.html"/>
+	</entry>	
+
+<!-- E -->
+
+	<entry keyword="emulator">
+	   <topic href="html/concepts/emulators.htm"/>
+	   <topic href="html/reference/wnd_build_prefs.htm"/>
+	</entry>	
+
+    <entry keyword="Environment variables">
+       <topic href="html/reference/build_properties/pane_build_config_env.htm"/>
+	</entry>
+
+	<entry keyword="Executables">
+	   <topic href="html/reference/trk/panel_trk_exes.htm"/>
+	</entry>
+
+	<entry keyword="External Build">
+	   <topic href="html/concepts/ext_build_support.htm"/>
+	</entry>
+
+	<entry keyword="Expressions">
+	   <topic href="html/tasks/expressions/expr_adding.htm" label="Adding"/>
+	   <topic href="html/tasks/expressions/expr_editing.htm" label="Editing"/>
+	   <topic href="html/tasks/expressions/expr_removing.htm" label="Removing"/>
+	</entry>
+
+	<entry keyword="Expressions view">
+	   <topic href="html/reference/view_expressions.htm"/>
+	</entry>
+
+	<entry keyword="Executables view">
+	   <topic href="html/reference/view_executables.htm"/>
+	</entry>
+
+
+<!-- F -->
+
+	<entry keyword="File Transfer Pane">
+	   <topic href="html/reference/trk/panel_trk_file_transfer.htm"/>
+	</entry>
+
+	<entry keyword="FPU Registers">
+	   <topic href="html/concepts/fpu_registers.htm"/>
+	</entry>
+
+	<entry keyword="Freezing DLL Projects">
+	   <topic href="html/tasks/projects/prj_freeze_def_file.htm"/>
+	</entry>
+
+<!-- G -->
+
+	<entry keyword="General Registers">
+	   <topic href="html/concepts/general_registers.htm"/>
+	</entry>
+
+	<entry keyword="Global Variables Window">
+	   <topic href="html/reference/view_global_variables.htm"/>
+	</entry>
+
+<!-- H -->
+
+	<entry keyword="HelloCarbide">
+	   <topic href="html/tasks/start/carbide_example.htm" label="First Application Example"/>
+	   <topic href="html/tasks/start/carbide_example_trk.htm" label="On-Device Run Mode Example"/>
+	</entry>
+
+	<entry keyword="Hints and Tips">
+	   <topic href="html/hints_tips.htm"/>
+	</entry>
+
+	<entry keyword="Host Registers">
+	   <topic href="html/concepts/host_registers.htm"/>
+	</entry>
+
+<!-- I -->
+
+	<entry keyword="Importing">
+	   <topic href="html/tasks/ImportingProjects.html"/>
+	   <topic href="html/tasks/projects/prj_import_exe.htm"/>
+       <topic href="html/qt_help/qt_importing_projs_01.htm"/>
+	</entry>
+
+	<entry keyword="INF Editor">
+	   <topic href="html/reference/INF_Editor.html" />
+	   <topic href="html/reference/INF_Editor_exports.html" />
+	   <topic href="html/reference/INF_Editor_file.html" />
+	   <topic href="html/reference/INF_Editor_addedit_make.html" />
+	   <topic href="html/reference/INF_Editor_addedit_mmp.html" />
+	</entry>
+
+	<entry keyword="installation">
+	   <topic href="html/tasks/start/carbide_install.htm"/>
+	   <topic href="html/tasks/trk/trk_install_pcsuite.htm"/>
+	   <topic href="html/tasks/trk/trk_install_bluetooth.htm"/>
+	   <topic href="html/tasks/trk/trk_install_usb.htm"/>
+	</entry>
+
+	<entry keyword="Installation Pane">
+	   <topic href="html/reference/trk/panel_trk_installation.htm"/>
+	</entry>
+
+	<entry keyword="Installing On-device Debug Agents">
+	   <topic href="html/tasks/trk/trk_installation_instr.htm" label="Overview"/>
+	   <topic href="html/tasks/trk/trk_install_bluetooth.htm" label="Bluetooth"/>
+	   <topic href="html/tasks/trk/trk_install_usb.htm" label="USB"/>
+	</entry>
+
+<!-- J -->
+<!-- K -->
+<!-- L -->
+
+	<entry keyword="Launch Configuration">
+	   <topic href="html/concepts/launch_configuration.htm" label="Overview"/>
+	   <topic href="html/tasks/trk/trk_carbide_setup.htm" label="TRK Setup"/>
+	   <topic href="html/tasks/projects/prj_debug_config.htm" label="Creating"/>
+	</entry>
+
+	<entry keyword="Launch Configuration Filter">
+	   <topic href="html/reference/trk/panel_filter.htm"/>
+	</entry>
+
+	<entry keyword="Leavescan">
+	   <topic href="html/reference/leavescan_pref.html"/>
+	</entry>
+
+	<entry keyword="Leavescan Menu Command">
+	   <topic href="html/reference/menus/run_leavescan.htm"/>
+	</entry>
+
+	<entry keyword="License">
+	   <topic href="html/license.htm" label="Carbide Licenses"/>
+	</entry>
+
+	<entry keyword="License Information">
+	   <topic href="html/legal.htm"/>
+	</entry>
+
+<!-- M -->
+
+	<entry keyword="Main pane">
+	   <topic href="html/reference/launch_configs/emulator_main.htm"/>
+	   <topic href="html/reference/launch_configs/page_trk_main.htm"/>
+	</entry>
+
+	<entry keyword="MBM Editor">
+       <topic href="html/reference/MBMEditor.html"/>
+	</entry>
+
+	<entry keyword="MBM File">
+       <topic href="html/concepts/MBMDefWizard.html"/>
+	</entry>
+
+	<entry keyword="memory">
+	   <topic href="html/concepts/working_with_memory.htm" />
+	   <topic href="html/tasks/memory/memory_monitor_adding.htm" label="Adding memory monitor"/>
+	   <topic href="html/tasks/memory/memory_monitor_removing.htm" label="Removing memory monitor"/>
+	   <topic href="html/tasks/memory/memory_rendering_adding.htm" label="Adding memory rendering pane"/>
+	   <topic href="html/tasks/memory/view_memory_show.htm" label="Opening memory view"/>
+	</entry>
+
+	<entry keyword="Memory Rendering Options">
+	   <topic href="html/reference/memory_rendering_options.htm"/>
+	</entry>
+
+	<entry keyword="Memory view">
+	   <topic href="html/reference/view_memory_wnd.htm"/>
+	</entry>
+
+	<entry keyword="menus">
+	   <topic href="html/reference/menus/new_symbian_class.htm" />
+	   <topic label="Symbian OS C++ Project" href="html/reference/menus/new_symbian_project.htm" />
+	   <topic href="html/reference/menus/open_cmd_window.htm" />
+	   <topic href="html/reference/menus/open_explorer_window.htm" />
+	   <topic href="html/reference/menus/s60_ui_designer.htm"/>
+		<topic href="html/reference/menus/run_codescanner.htm" />
+
+		<topic href="html/tasks/projects/prj_preprocess.htm" />
+
+		<topic href="html/tasks/projects/prj_build.htm" />
+		<topic href="html/tasks/projects/prj_clean.htm" />
+	
+		<topic href="html/reference/menus/build_all_targets.htm" />
+		<topic href="html/reference/menus/compile_source.htm" />		
+	
+		<topic href="html/reference/menus/build_symbian_comp.htm" />
+		<topic href="html/reference/menus/clean_symbian_comp.htm" />
+		<topic href="html/reference/menus/freeze_symbian_comp.htm" />
+	
+		<topic href="html/reference/menus/build_pkg_file.htm" />
+		<topic href="html/reference/ROM_build_settings.html" />
+
+   		<topic href="html/reference/menus/freeze_exports.htm" />
+	</entry>
+
+
+	<entry keyword="MIF Editor">
+	   <topic href="html/reference/view_mifdef_editor.htm"/>
+	</entry>
+
+	<entry keyword="MMP Editor">
+	   <topic href="html/reference/MMP_Editor.html" label="MMP Editor" />
+	   <topic href="html/reference/MMP_Editor_sources.html" label="Sources tab"/>
+	   <topic href="html/reference/MMP_Editor_libraries.html" label="Libraries tab"/>
+	   <topic href="html/reference/MMP_Editor_options.html" label="Options tab"/>
+	   <topic href="html/reference/MMP_Editor_mmp_tab.html" label="MMP File tab"/>
+	   <topic href="html/reference/MMP_Editor_resource_block.html" label="Resource Block"/>
+	</entry>
+	
+	<entry keyword="MMP Files">
+	   <topic href="html/concepts/mmpfiles.htm"/>
+	</entry>
+
+	<entry keyword="MMP Wizard">
+	   <topic href="html/reference/NewMMP_wizard.html"/>
+	</entry>
+
+	<entry keyword="Modify">
+	   <topic href="html/concepts/Modify.html"/>
+	</entry>
+
+	<entry keyword="Modifying Resources">
+	   <topic href="html/tasks/ModifyingResources.html"/>
+	</entry>
+
+	<entry keyword="Modules View">
+	   <topic href="html/reference/view_module_wnd.htm"/>
+	</entry>
+
+	<entry keyword="Multi-core Debugging">
+	   <topic href="html/concepts/work_mcore_debug.htm"/>
+	</entry>
+
+<!-- N -->
+<!-- O -->
+
+   <entry keyword="On-device Connections">
+   		<topic href="html/reference/trk/wnd_new_connection_wizard.htm" />
+     	<topic href="html/reference/trk/view_remote_connection.htm" />
+		<topic href="html/reference/trk/wnd_new_conn_wiz_edit.htm"/>
+  		<topic href="html/reference/trk/exporting_remote_conns.htm" />
+	</entry>
+
+<!-- P -->
+
+	<entry keyword=".pkg file symbols">
+	   <topic href="html/concepts/symbols_pkg.htm"/>
+	</entry>
+
+	<entry keyword="PKG and SIS Files">
+	   <topic href="html/tasks/projects/working_with_sis_pkg_files.htm"/>
+	</entry>
+
+    <entry keyword="Platform Filtering Preferences">
+        <topic href="html/tasks/sdks/sdk_platform_filter.htm"/>
+    </entry>
+
+    <entry keyword="preferences">
+		<topic href="html/reference/wnd_build_prefs.htm" />
+		<topic href="html/reference/wnd_debugger_prefs.htm" />
+		<topic href="html/reference/prefs_carbide_news.htm" />
+		<topic href="html/reference/leavescan_pref.html" />
+		<topic href="html/tasks/sdks/sdk_platform_filter.htm" />
+		<topic href="html/reference/SDKPreferences.html" />
+    </entry>
+
+	<entry keyword="Processes">
+	   <topic href="html/tasks/processes/attach_debugger_to_process.htm" label="Attaching debugger to Symbian OS Process"/>
+	</entry>
+
+    <entry keyword="Projects">
+       <topic href="html/concepts/Projects.html"/>
+       <topic href="html/qt_help/qt_creating_projs_01.htm"/>
+       <topic href="html/qt_help/qt_importing_projs_01.htm"/>
+	</entry>
+
+    <entry keyword="Project and File Properties">
+	   <topic href="html/reference/ProjectPreferences.html"/>
+	</entry>
+
+	<entry keyword="Project Dependencies">
+	   <topic href="html/tasks/projects/prj_build_multi_projects.htm"/>
+	</entry>
+
+    <entry keyword="Project Updater">
+	   <topic href="html/reference/olderproject_updater.html"/>
+	</entry>
+
+
+<!-- Q -->
+
+    <entry keyword="Qt">
+       <topic href="html/qt_help/qt_creating_projs_01.htm"/>
+       <topic href="html/qt_help/qt_importing_projs_01.htm"/>
+       <topic href="html/qt_help/qt_perspectives.htm"/>
+       <topic href="html/qt_help/qt_pref_panel.htm"/>
+       <topic href="html/qt_help/qt_project_properties.htm"/>
+	</entry>
+
+<!-- R -->
+
+	<entry keyword="register">
+	   <topic href="html/tasks/start/carbide_register.htm"/>
+	</entry>
+
+	<entry keyword="registers">
+	   <topic href="html/concepts/registers.htm" label="Overview"/>
+	   <topic href="html/tasks/registers/mem_reg_changing.htm" label="Changing Values"/>
+	   <topic href="html/tasks/registers/mem_reg_data_views.htm" label="Changing Data Views"/>
+	   <topic href="html/tasks/registers/mem_reg_open_wnd.htm" label="Opening Registers View"/>
+	   <topic href="html/tasks/registers/mem_reg_viewing.htm" label="Expanding Groups"/>
+	</entry>
+
+	<entry keyword="Registers View">
+	   <topic href="html/reference/view_registers.htm"/>
+	</entry>
+
+	<entry keyword="Restarting Debugger">
+	   <topic href="html/tasks/debugger/work_debug_act_restart.htm"/>
+	</entry>
+
+	<entry keyword="Resuming Program Execution">
+	   <topic href="html/tasks/debugger/work_debug_act_resume.htm"/>
+	</entry>
+
+	<entry keyword="Requirements">
+	   <topic href="html/tasks/start/carbide_requirements.htm"/>
+	</entry>
+
+	<entry keyword="ROM Build Settings">
+	   <topic href="html/reference/ROM_build_settings.html"/>
+	</entry>
+
+	<entry keyword="Running a Program">
+	   <topic href="html/tasks/debugger/work_debug_act_run.htm"/>
+	</entry>
+
+<!-- S -->
+
+	<entry keyword="SDKs">
+	   <topic href="html/tasks/sdks/sdk_add.htm" />
+	   <topic href="html/tasks/sdks/sdk_add_custkits.htm" label="Adding Symbian Custom Kits"/>
+	   <topic href="html/tasks/sdks/sdk_search.htm" label="Searching"/>
+	   <topic href="html/tasks/sdks/sdk_view_properties.htm" label="Viewing Properties"/>
+       <topic href="html/qt_help/qt_pref_panel.htm"/>
+	</entry>
+
+	<entry keyword="SDK Preferences">
+	   <topic href="html/reference/SDKPreferences.html"/>
+       <topic href="html/qt_help/qt_pref_panel.htm"/>
+	</entry>
+
+	<entry keyword="SDK Support">
+	   <topic href="html/concepts/SDKSupport.html"/>
+	   <topic href="html/tasks/AddinganSDK.html" />
+	   <topic href="html/tasks/WorkingwithSDKs.html"/>
+	   <topic href="html/tasks/RmvngandVwngPropsosSDK.html" label="Viewing and Editing SDK Properties"/>
+	</entry>
+
+	<entry keyword="SIS File">
+	   <topic href="html/tasks/start/carbide_deploying.htm" label="Uploading"/>
+	</entry>
+
+	<entry keyword="Sophia Target Interface Stop Mode Debugging">
+	   <topic href="html/reference/wnd_sophia_config.htm"/>
+	</entry>
+
+	<entry keyword="Starting the Debugger">
+	   <topic href="html/tasks/debugger/work_debug_act_start.htm"/>
+	</entry>
+
+	<entry keyword="Step Into">
+	   <topic href="html/tasks/debugger/work_debug_act_stepinto.htm"/>
+	</entry>
+
+	<entry keyword="Step Over">
+	   <topic href="html/tasks/debugger/work_debug_act_stepover.htm"/>
+	</entry>
+
+	<entry keyword="Step Return">
+	   <topic href="html/tasks/debugger/work_debug_act_stepout.htm"/>
+	</entry>
+
+	<entry keyword="Stop Debug Session">
+	   <topic href="html/tasks/debugger/work_debug_act_stop.htm"/>
+	</entry>
+
+	<entry keyword="Stop Mode Debugging">
+	   <topic href="html/tasks/debugger/stop_mode_debug_precond.htm" label="Stop Mode Debugging"/>
+	</entry>
+
+	<entry keyword="Symbian OS Classes">
+	   <topic href="html/tasks/projects/prj_adding_symbian_class.htm" label="Adding"/>
+	</entry>
+
+	<entry keyword="Symbian OS Data View">
+	   <topic href="html/reference/view_symbian_kernel.htm"/>
+	   <topic href="html/tasks/debugger/view_symbian_kernel_set.htm" />
+	</entry>
+
+    <entry keyword="Symbian OS SDKs">
+	   <topic href="html/reference/ProjectTypeandSDK.html"/>
+	</entry>
+
+    <entry keyword="Symbian Project Navigator">
+       <topic href="html/reference/view_sym_proj_nav.htm"/>
+    </entry>
+   
+	<entry keyword="Symbol Hint">
+	   <topic href="html/concepts/symbol_hints.htm"/>
+	</entry>
+
+	<entry keyword="Symbolics Files">
+	   <topic href="html/concepts/symbolic_files_about.htm"/>
+	</entry>
+
+	<entry keyword="System Browser View">
+	   <topic href="html/reference/view_system_browser.htm"/>
+	</entry>
+
+<!-- T -->
+
+	<entry keyword="templates">
+	   <topic href="html/concepts/templates.htm"/>
+	</entry>
+
+	<entry keyword="Terminate Program">
+	   <topic href="html/tasks/debugger/work_debug_act_kill.htm"/>
+	</entry>
+
+	<entry keyword="test components">
+	   <topic href="html/reference/wnd_build_prefs.htm"/>
+	</entry>
+
+	<entry keyword="Thread Breakpoint">
+	   <topic href="html/concepts/thread_cond_breakpoints.htm"/>
+	</entry>
+
+	<entry keyword="Trace32 Interface for Stop Mode Debugging">
+	   <topic href="html/reference/wnd_Trace32_config.htm"/>
+	</entry>
+
+	<entry keyword="TRK" >
+		<topic href="html/concepts/trk.htm"/>
+		<topic href="html/tasks/trk/trk_overview.htm"/>
+		<topic href="html/tasks/trk/trk_carbide_setup.htm" />
+		<topic href="html/tasks/start/carbide_example_trk.htm" />
+		<topic href="html/tasks/debugger/stop_mode_debug.htm" />
+	</entry>
+	
+
+	<entry keyword="TRK Pane">
+	   <topic href="html/reference/trk/panel_trk_overview.htm"/>
+	</entry>
+
+<!-- U -->
+
+	<entry keyword="updating">
+	   <topic label="Carbide.c++"	href="html/tasks/start/carbide_updating.htm"/>
+	   <topic label="projects"		href="html/reference/olderproject_updater.html"/>
+	</entry>
+
+	<entry keyword="USB setup">
+	   <topic href="html/tasks/trk/trk_connection_usb.htm" label="TRK"/>
+	</entry>
+
+<!-- V -->
+
+	<entry keyword="variables">
+	   <topic href="html/concepts/working_with_variables.htm" />
+	   <topic href="html/tasks/variables/set_variable_formats.htm" />
+	   <topic href="html/tasks/variables/show_global_variables.htm" />
+	   <topic href="html/tasks/variables/show_variables_view.htm" />
+	</entry>
+
+	<entry keyword="Variables view">
+	   <topic href="html/reference/view_variables.htm"/>
+	</entry>
+
+	<entry keyword="views">
+		<topic href="html/reference/view_breakpoints.htm" />
+		<topic href="html/reference/view_log.htm" />
+		<topic href="html/reference/view_carbide_news.htm" />
+		<topic href="html/reference/view_debug.htm" />
+		<topic href="html/reference/view_disassembly.htm" />
+		<topic href="html/reference/view_executables.htm" />
+		<topic href="html/reference/view_expressions.htm" />
+		<topic href="html/reference/view_memory_wnd.htm" />
+		<topic href="html/reference/view_module_wnd.htm" />
+	    <topic href="html/concepts/registers.htm" />
+	    <topic href="html/reference/view_symbian_kernel.htm" />
+	    <topic href="html/reference/view_variables.htm" />
+	</entry>
+
+
+<!-- W -->
+
+	<entry keyword="watchpoints">
+	   <topic label="Watchpoints" href="html/tasks/watchpoints/pgm_watchpoints.htm" />
+	   <topic href="html/tasks/watchpoints/pgm_wpt_clearing.htm" />
+	   <topic href="html/tasks/watchpoints/pgm_wpt_conditional.htm" />
+	   <topic href="html/tasks/watchpoints/pgm_wpt_disable.htm" />
+	   <topic href="html/tasks/watchpoints/pgm_wpt_enable.htm" />
+	   <topic href="html/tasks/watchpoints/pgm_wpt_setting.htm" />
+	   <topic href="html/tasks/watchpoints/pgm_wpt_view_props.htm" />
+	</entry>
+
+    <entry keyword="workspaces">
+	   <topic href="html/concepts/workspaces.htm"/>
+	</entry>
+
+<!-- X -->
+
+	<entry keyword="x86 Exceptions Pane">
+	   <topic href="html/reference/launch_config/emulator_exceptions.htm"/>
+	</entry>
+
+<!-- Y -->
+<!-- Z -->
+</index>
--- a/core/com.nokia.carbide.cpp.doc.user/tocCarbide.xml	Fri Apr 24 10:31:21 2009 -0500
+++ b/core/com.nokia.carbide.cpp.doc.user/tocCarbide.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -3,50 +3,52 @@
 
 <toc label="Introduction" href="html/concepts/Introduction.html"  >
 
-	<topic label="Carbide.c++ Overview" >
-	      
-		<topic label="Introduction" 				href="html/concepts/Introduction.html" >
-		<topic label="System Requirements" 		href="html/tasks/start/carbide_requirements.htm" />
-   <topic href="html/tasks/start/carbide_install.htm" label="Carbide.c++ Installation">
-   </topic>
+	<topic label="Carbide.c++ Overview" 			href="html/tasks/start/carbide_overview.htm" >
+
+		<topic label="System Requirements" 			href="html/tasks/start/carbide_requirements.htm" />
+		<topic label="Carbide Help" 				href="html/tasks/start/carbide_help.htm" />
+		<topic label="Carbide Tools" 				href="html/tasks/start/carbide_tools.htm" />
+
+		<topic label="Updating Carbide" 			href="html/tasks/start/carbide_updating.htm" >
 			<topic label="Supported Target Types"	href="html/concepts/build_targets.htm" />		
 			<topic label="Supported SDKs" 		    href="html/sos_references.htm" />
 			<topic label="Updating Carbide.c++" 	href="html/tasks/start/carbide_updating.htm" />
 		</topic>
 	
-		<topic label="Tour of the UI"			href="html/concepts/tour.html" />
-		<topic label="Project Updater"          href="html/reference/olderproject_updater.html" />
+		<topic label="Tour of the UI"				href="html/concepts/tour.html" />
+		<topic label="Project Updater"          	href="html/reference/olderproject_updater.html" />
 
-		<topic label="Application Emulator Debug Example"  				href="html/tasks/start/carbide_example.htm" >
+		<topic label="Application Emulator Debug Example"  	href="html/tasks/start/carbide_example.htm" >
 			<topic label="1. Creating New Projects" 		        	href="html/tasks/CreatingNewProjects.html" />
 			<topic label="2. Building Projects and Symbian Components" 	href="html/tasks/projects/prj_build.htm" />
 			<topic label="3. Creating a Launch Configuration"			href="html/tasks/projects/prj_debug_config.htm" />
 			<topic label="4. Debugging a Symbian OS Program" 			href="html/tasks/start/carbide_debugging.htm" />
 		</topic>
 	
-		<topic href="html/concepts/SampleExampleProjectCreate.html" label="DLL Emulator Example">
-  </topic>
-		
-		<topic label="Carbide Menus " 							href="html/reference/menus/menus.htm" >
-     <topic href="html/reference/trk/wnd_on_device_setup.htm" label="On-Device Connection...">
-     </topic>
-			<topic label="Open Command Window"					href="html/reference/menus/open_cmd_window.htm" />
-			<topic label="Run CodeScanner"						href="html/reference/menus/run_codescanner.htm" />
-			<topic label="Run Leavescan"						href="html/reference/menus/run_leavescan.htm" />
-			<topic label="S60 UI Designer"						href="html/reference/menus/s60_ui_designer.htm" />
-			<topic label="Show in Explorer"						href="html/reference/menus/open_explorer_window.htm" />
-   <topic href="html/reference/menus/new_symbian_class.htm" label="Symbian OS C++ Class">
-      <topic href="html/tasks/projects/prj_adding_symbian_class.htm" label="New Symbian OS C++ Class wizard">
-      </topic>
-   </topic>
-			<topic href="html/tasks/CreatingNewProjects.html" label="Symbian OS C++ Project">
-      <topic href="html/tasks/CreatingNewProjects.html" label="New Symbian OS C++ Project wizard">
-      </topic>
-   </topic>
-			<topic label="Symbian OS MMP File"					href="html/reference/menus/new_symbian_mmp_file.htm" />
-			<topic label="Context menus" 						href="html/concepts/contextual_menus.htm" />
+		<topic label="DLL Emulator Example" href="html/concepts/SampleExampleProjectCreate.html" />
+
+	</topic>
+
+	<topic label="Carbide Menus " 					href="html/reference/menus/menus.htm" >
+
+     <topic href="html/reference/trk/wnd_on_device_setup.htm" label="On-Device Connection..."/>
+		<topic label="Open Command Window"			href="html/reference/menus/open_cmd_window.htm" />
+		<topic label="Run CodeScanner"				href="html/reference/menus/run_codescanner.htm" />
+		<topic label="Run Leavescan"				href="html/reference/menus/run_leavescan.htm" />
+		<topic label="S60 UI Designer"				href="html/reference/menus/s60_ui_designer.htm" />
+		<topic label="Show in Explorer"				href="html/reference/menus/open_explorer_window.htm" />
+
+		<topic label="Symbian OS C++ Class"			href="html/reference/menus/new_symbian_class.htm" >
+      		<topic label="New Symbian OS C++ Class wizard"	href="html/tasks/projects/prj_adding_symbian_class.htm" />
 		</topic>
 
+		<topic label="Symbian OS C++ Project"		href="html/tasks/CreatingNewProjects.html" >
+			<topic label="New Symbian OS C++ Project wizard"	href="html/tasks/CreatingNewProjects.html" />
+		</topic>
+
+		<topic label="Symbian OS MMP File"			href="html/reference/menus/new_symbian_mmp_file.htm" />
+		<topic label="Context menus" 				href="html/concepts/contextual_menus.htm" />
+
 	</topic>
 	
 
@@ -59,7 +61,6 @@
 			<topic label="Remote Connections view"			href="html/reference/trk/view_remote_connection.htm" />
 			<topic label="Workspace Information"	        href="html/concepts/workspaces.htm" />
 			<topic label="Carbide.c++ News view"			href="html/reference/view_carbide_news.htm" />
-
 		</topic>
 		
 		<topic label="Carbide.c++ preferences" 				href="html/reference/wnd_carbide_pref.htm" >
@@ -75,53 +76,50 @@
 			<topic label="Preprocess"						href="html/reference/wnd_preprocess_prefs.htm" />
 			<topic label="SDK Preferences"                  href="html/reference/SDKPreferences.html" />
 			<topic label="UI Designer"          			href="PLUGINS_ROOT/com.nokia.carbide.cpp.uidesigner.doc.user/html/reference/uidesign/ref_ui_designer_prefs.htm" />
-          <topic href="html/reference/wnd_pref_code_style.htm" label="Code Styles">
-           <topic href="html/tasks/code_style_workspace.htm" label="Setting the Workspace Code Style">
-           </topic>
-           <topic href="html/tasks/code_style_reformatting_sources.htm" label="Reformatting a Source File">
-           </topic>
-          </topic>
-        </topic>
-  <topic href="html/tasks/WorkingwithSDKs.html" label="Working with SDKs">
-     <topic href="html/concepts/SDKSupport.html" label="SDK Support">
-     </topic>
-     <topic href="html/tasks/AddinganSDK.html" label="Adding an SDK">
-        <topic href="html/tasks/sdks/sdk_add.htm" label="Adding SDKs">
-        </topic>
-     </topic>
-     <topic href="html/tasks/sdks/sdk_search.htm" label="Searching for SDKs">
-     </topic>
-     <topic href="html/tasks/sdks/sdk_view_properties.htm" label="Viewing SDK Properties">
-     </topic>
-     <topic href="html/tasks/RmvngandVwngPropsosSDK.html" label="Editing SDK Properties">
-     </topic>
-     <topic href="html/tasks/sdks/sdk_add_custkits.htm" label="Adding Symbian Custom Kits">
-     </topic>
-  </topic>
+
+			<topic label="Code Styles"						href="html/reference/wnd_pref_code_style.htm" >
+				<topic label="Setting the Workspace Code Style"	href="html/tasks/code_style_workspace.htm" />
+				<topic label="Reformatting a Source File"		href="html/tasks/code_style_reformatting_sources.htm" />
+			</topic>
+		</topic>
+
+		<topic label="Working with SDKs"					href="html/tasks/WorkingwithSDKs.html" >
+			<topic label="SDK Support"						href="html/concepts/SDKSupport.html" />
 
-		<topic label="Creating projects" 								href="html/tasks/CreatingProjectsToc.htm">
-			<topic label="Project Templates" 					    	href="html/concepts/templates.htm"/>
-			<topic label="Creating from a Template" 					href="html/tasks/CreatingNewProjects.html"/>
-			<topic label="Importing Projects from a BLD.INF File"		href="html/tasks/ImportingProjects.html"/>
+			<topic label="Adding an SDK"					href="html/tasks/AddinganSDK.html" >
+				<topic label="Adding SDKs"					href="html/tasks/sdks/sdk_add.htm" />
+			</topic>
+
+			<topic label="Searching for SDKs"				href="html/tasks/sdks/sdk_search.htm" />
+			<topic label="Viewing SDK Properties"			href="html/tasks/sdks/sdk_view_properties.htm" />
+			<topic label="Editing SDK Properties"			href="html/tasks/RmvngandVwngPropsosSDK.html" />
+			<topic label="Adding Symbian Custom Kits"		href="html/tasks/sdks/sdk_add_custkits.htm" />
+		</topic>
+
+		<topic label="Creating projects" 								href="html/tasks/CreatingProjectsToc.htm" >
+			<topic label="Project Templates" 					    	href="html/concepts/templates.htm" />
+			<topic label="Creating from a Template" 					href="html/tasks/CreatingNewProjects.html" />
+			<topic label="Importing Projects from a BLD.INF File"		href="html/tasks/ImportingProjects.html" />
 			<topic label="Importing Projects with Inter-Dependencies"	href="html/tasks/projects/prj_build_multi_projects.htm" />
-			<topic label="N-Gage Projects" 								href="html/concepts/ngage_projects.htm"/>
+			<topic label="N-Gage Projects" 								href="html/concepts/ngage_projects.htm" />
 		</topic>
 	
 		<topic label="C/C++ Project and File Properties"	href="html/reference/ProjectPreferences.html" >
 		
 			<topic label="Carbide Build Configurations"					href="html/reference/build_properties/pane_build_config.htm" >
+
 				<topic label="SIS Builder" 								href="html/reference/build_properties/pane_build_config_sis.htm" >
 					<topic label="SIS Properties"						href="html/reference/build_properties/wnd_sis_properties.htm" />
 				</topic>
+
 				<topic label="Environment"								href="html/reference/build_properties/pane_build_config_env.htm" />
 				<topic label="Arguments"								href="html/reference/build_properties/pane_build_config_args.htm" />
 				<topic label="Paths and Symbols"						href="html/reference/build_properties/pane_build_config_paths.htm" />
 				<topic label="ROM Builder"								href="html/reference/ROM_build_settings.html" />
 			</topic>
-   <topic href="html/reference/build_properties/pane_macro_settings.htm" label="Carbide Macro Settings">
-   </topic>
-			
-			<topic label="Carbide Project Settings"			href="html/reference/build_properties/pane_project_settings.htm" />
+
+			<topic label="Carbide Macro Settings"						href="html/reference/build_properties/pane_macro_settings.htm" />
+			<topic label="Carbide Project Settings"						href="html/reference/build_properties/pane_project_settings.htm" />
 		</topic>
 	
 		<topic label="Building projects"  							href="html/concepts/build_system.htm" >
@@ -148,121 +146,89 @@
    			<topic label="Freeze Exports"							href="html/reference/menus/freeze_exports.htm" />
 		</topic>
 	
-		<topic label="Resource and project editors"  	href="html/tasks/ModifyingResources.html" >
+		<topic label="Resource and project editors"		href="html/tasks/ModifyingResources.html" >
 			
-			<topic label="AIF files" 				 	 href="html/concepts/AIFDefWizard.html" >
-				<topic label="AIF Editor" 				 href="html/reference/AIFEditor.html"/>
-				<topic label="Creating an AIF File" 	 href="html/tasks/AppInfoFile.html"/>
+			<topic label="AIF files"					href="html/concepts/AIFDefWizard.html" >
+				<topic label="AIF Editor"				href="html/reference/AIFEditor.html" />
+				<topic label="Creating an AIF File"		href="html/tasks/AppInfoFile.html" />
 			</topic>
 			
-			<topic label="Classes"  								href="html/tasks/ClassesToc.htm">
-				<topic label="Adding Classes" 						href="html/tasks/AddingClasses.html"/>
-				<topic label="New Class Wizard" 					href="html/reference/NewClassWizard.html"/>
+			<topic label="Classes"  								href="html/tasks/ClassesToc.htm" >
+				<topic label="Adding Classes" 						href="html/tasks/AddingClasses.html" />
+				<topic label="New Class Wizard" 					href="html/reference/NewClassWizard.html" />
 				<topic label="Adding Symbian OS Classes Wizard"		href="html/tasks/projects/prj_adding_symbian_class.htm" />
 			</topic>
 			
-			<topic href="html/reference/INF_Editor.html" label="INF editor">
-      <topic href="html/reference/INF_Editor.html" label="Overview tab">
-      </topic>
-      <topic href="html/reference/INF_Editor_exports.html" label="Exports tab">
-      </topic>
-      <topic href="html/reference/INF_Editor_file.html" label="BLD.INF tab">
-      </topic>
-      <topic href="html/reference/INF_Editor_addedit_make.html" label="Add / Edit Make File">
-      </topic>
-      <topic href="html/reference/INF_Editor_addedit_mmp.html" label="Add / Edit MMP File">
-      </topic>
-   </topic>
+			<topic label="INF editor"					href="html/reference/INF_Editor.html" >
+				<topic label="Overview tab"				href="html/reference/INF_Editor.html" />
+				<topic label="Exports tab"				href="html/reference/INF_Editor_exports.html" />
+				<topic label="BLD.INF tab"				href="html/reference/INF_Editor_file.html" />
+				<topic label="Add / Edit Make File"		href="html/reference/INF_Editor_addedit_make.html" />
+				<topic label="Add / Edit MMP File"		href="html/reference/INF_Editor_addedit_mmp.html" />
+			</topic>
 	
-			<topic label="MBM/MIF files" 			 href="html/concepts/MBMDefWizard.html" >
-				<topic label="MBM Editor" 			 href="html/reference/MBMEditor.html"/>
-				<topic label="Creating MBM Files" 	 href="html/tasks/Multi-BitmapFile.html"/>
-				<topic label="MBM/MIF Editor"		 href="html/reference/view_mifdef_editor.htm" />
+			<topic label="MBM/MIF files" 			href="html/concepts/MBMDefWizard.html" >
+				<topic label="MBM Editor" 			href="html/reference/MBMEditor.html" />
+				<topic label="Creating MBM Files" 	href="html/tasks/Multi-BitmapFile.html" />
+				<topic label="MBM/MIF Editor"		href="html/reference/view_mifdef_editor.htm" />
 			</topic>
 			
-			<topic label="MMP files" 				 href="html/concepts/mmpfiles.htm" >
-				<topic label="MMP Wizard"		     href="html/reference/NewMMP_wizard.html" />
-				<topic href="html/reference/MMP_Editor.html" label="MMP Editor">
-       <topic href="html/reference/MMP_Editor_sources.html" label="Sources tab">
-       </topic>
-       <topic href="html/reference/MMP_Editor_libraries.html" label="Libraries tab">
-       </topic>
-       <topic href="html/reference/MMP_Editor_options.html" label="Options tab">
-       </topic>
-       <topic href="html/reference/MMP_Editor_mmp_tab.html" label="MMP File tab">
-       </topic>
-    </topic>
+			<topic label="MMP files" 				href="html/concepts/mmpfiles.htm" >
+				<topic label="MMP Wizard"		    href="html/reference/NewMMP_wizard.html" />
+
+				<topic label="MMP Editor"			href="html/reference/MMP_Editor.html" >
+					<topic label="Sources tab"		href="html/reference/MMP_Editor_sources.html" />
+					<topic label="Libraries tab"	href="html/reference/MMP_Editor_libraries.html" />
+					<topic label="Options tab"		href="html/reference/MMP_Editor_options.html" />
+					<topic label="MMP File tab"		href="html/reference/MMP_Editor_mmp_tab.html" />
+  				</topic>
 			</topic>
-			
 		</topic>
 	
+		<topic label="Launch configurations"				href="html/projects/launch/launch_configs_overview.htm" >
+			<topic label="New Launch Configuration Wizard"	href="html/projects/launch/wiz_new_launch_config.htm" />
+			<topic label="Debug dialog"						href="html/projects/launch/wnd_debug_configuration.htm" />
 
-   <topic href="html/projects/launch/launch_configs_overview.htm" label="Launch configurations">
-    <topic href="html/projects/launch/wiz_new_launch_config.htm" label="New Launch Configuration Wizard">
-    </topic>
-    <topic href="html/projects/launch/wnd_debug_configuration.htm" label="Debug dialog">
-    </topic>
-    <topic label="Launch configurations" href="html/concepts/launch_configuration.htm">
-	    <topic label="Applications" href="html/projects/launch/applications.htm">
-	    </topic>
-     <topic label="Application TRK" href="html/projects/launch/run_mode.htm">
-     </topic>
-     <topic label="Attach to Process" href="html/projects/launch/attach_process.htm" >
-     </topic>
-	    <topic href="html/projects/launch/emulation.htm" label="Emulation">
-	    </topic>
-     <topic label="Sophia (STI)" href="html/projects/launch/sophia.htm" >
-     </topic>
-     <topic label="System TRK" href="html/projects/launch/stop_mode.htm" >
-     </topic>
-     <topic label="Trace32" href="html/projects/launch/trace32.htm" >
-     </topic>
-     <anchor id="launch_config_ANCHOR"/>
-   </topic>
-    <topic href="html/projects/launch/pages_overview.htm" label="Configuration panes">
-       <topic href="PLUGINS_ROOT/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_arg.htm" label="Arguments">
-       </topic>
-       <topic href="PLUGINS_ROOT/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_comm.htm" label="Common">
-       </topic>
-       <topic href="html/projects/launch/page_debugger.htm" label="Debugger">
-       </topic>
-       <topic href="html/projects/launch/page_executables.htm" label="Executables">
-       </topic>
-       <topic label="File Transfer" href="html/projects/launch/page_file_transfer.htm" >
-       </topic>
-       <topic label="Installation" href="html/projects/launch/page_installation.htm" >
-       </topic>
-       <topic label="Main" href="html/projects/launch/page_main.htm" >
-       </topic>
-       <topic label="ROM Image" href="html/projects/launch/page_rom_image.htm" >
-       </topic>
-       <topic label="ROM Log File" href="html/projects/launch/page_rom_log.htm" >
-       </topic>
-       <topic href="PLUGINS_ROOT/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_srce.htm" label="Sources">
-       </topic>
-       <topic label="x86 Exceptions" href="html/projects/launch/page_exceptions.htm" >
-       </topic>
-    </topic>
-    <topic href="html/projects/launch/customizing_launch_configs.htm" label="Customizing launch configurations">
-    </topic>
-    <topic href="html/projects/launch/launch_configuration_filter.htm" label="Filtering launch configurations">
-    </topic>
- </topic>
-   <topic href="html/qt_help/qt_overview.htm" label="Qt project support">
-      <topic href="html/qt_help/qt_project_setup.htm" label="Qt development setup">
-      <topic href="html/qt_help/qt_creating_projs_01.htm" label="Creating Qt projects">
-      </topic>
-      <topic href="html/qt_help/qt_importing_projs_01.htm" label="Importing Qt projects">
-      </topic>
-      </topic>
-      <topic href="html/qt_help/qt_perspectives.htm" label="Qt C/C++ perspective">
-      </topic>
-      <topic href="html/qt_help/qt_pref_panel.htm" label="Qt preference panel">
-      </topic>
-      <topic href="html/qt_help/qt_project_properties.htm" label="Qt project properties">
-      </topic>
-   </topic>
+		    <topic label="Launch configurations"			href="html/concepts/launch_configuration.htm" >
+				<topic label="Applications"					href="html/projects/launch/applications.htm" />
+				<topic label="Application TRK"				href="html/projects/launch/run_mode.htm" />
+				<topic label="Attach to Process"			href="html/projects/launch/attach_process.htm" />
+				<topic label="Emulation"					href="html/projects/launch/emulation.htm" />
+				<topic label="Sophia (STI)"					href="html/projects/launch/sophia.htm" />
+				<topic label="System TRK"					href="html/projects/launch/stop_mode.htm" />
+				<topic label="Trace32"						href="html/projects/launch/trace32.htm" />
+				<anchor id="launch_config_ANCHOR"/>
+			</topic>
+			
+ 			<topic label="Configuration panes"				href="html/projects/launch/pages_overview.htm" >
+				<topic label="Arguments"					href="PLUGINS_ROOT/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_arg.htm" />
+				<topic label="Common"						href="PLUGINS_ROOT/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_comm.htm" />
+				<topic label="Debugger"						href="html/projects/launch/page_debugger.htm" />
+				<topic label="Executables"					href="html/projects/launch/page_executables.htm" />
+				<topic label="File Transfer"				href="html/projects/launch/page_file_transfer.htm" />
+				<topic label="Installation"					href="html/projects/launch/page_installation.htm" />
+				<topic label="Main"							href="html/projects/launch/page_main.htm" />
+				<topic label="ROM Image"					href="html/projects/launch/page_rom_image.htm" />
+				<topic label="ROM Log File"					href="html/projects/launch/page_rom_log.htm" />
+				<topic label="Sources"						href="PLUGINS_ROOT/org.eclipse.cdt.doc.user/reference/cdt_u_run_dbg_srce.htm" />
+				<topic label="x86 Exceptions"				href="html/projects/launch/page_exceptions.htm" />
+			</topic>
 
+			<topic label="Customizing launch configurations"	href="html/projects/launch/customizing_launch_configs.htm" />
+			<topic label="Filtering launch configurations"		href="html/projects/launch/launch_configuration_filter.htm" />
+		</topic>
+
+		<topic label="Qt project support"					href="html/qt_help/qt_overview.htm" >
+
+			<topic label="Qt development setup"				href="html/qt_help/qt_project_setup.htm" >
+				<topic label="Creating Qt projects"			href="html/qt_help/qt_creating_projs_01.htm" />
+				<topic label="Importing Qt projects"		href="html/qt_help/qt_importing_projs_01.htm" />
+			</topic>
+
+			<topic label="Qt C/C++ perspective"				href="html/qt_help/qt_perspectives.htm" />
+			<topic label="Qt preference panel"				href="html/qt_help/qt_pref_panel.htm" />
+			<topic label="Qt project properties"			href="html/qt_help/qt_project_properties.htm" />
+		</topic>
 	</topic>
   
 	
@@ -313,12 +279,12 @@
    </topic>
 			
 			<topic label="Variables view"			href="html/reference/view_variables.htm" >
-      <topic href="html/concepts/working_with_variables.htm" label="Working with Variables">
+      <topic label="Working with Variables" href="html/concepts/working_with_variables.htm">
       </topic>
 			    <topic label="Opening a Variables View"				href="html/tasks/variables/show_variables_view.htm" />
-			    <topic href="html/tasks/variables/show_global_variables.htm" label="Showing Global Variables">
+			    <topic label="Showing Global Variables" href="html/tasks/variables/show_global_variables.htm">
        </topic>
-       <topic href="html/tasks/variables/set_variable_formats.htm" label="Setting Variable Formats">
+       <topic label="Setting Variable Formats" href="html/tasks/variables/set_variable_formats.htm">
        </topic>
 		    </topic>
 		</topic>
--- a/core/com.nokia.carbide.cpp/META-INF/MANIFEST.MF	Fri Apr 24 10:31:21 2009 -0500
+++ b/core/com.nokia.carbide.cpp/META-INF/MANIFEST.MF	Mon Apr 27 15:07:35 2009 -0500
@@ -2,7 +2,7 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Carbide.c++
 Bundle-SymbolicName: com.nokia.carbide.cpp; singleton:=true
-Bundle-Version: 2.0.4.qualifier
+Bundle-Version: 2.1.0.qualifier
 Bundle-Activator: com.nokia.carbide.cpp.ProductPlugin
 Bundle-Vendor: Nokia
 Bundle-Localization: plugin
--- a/core/com.nokia.carbide.cpp/html/welcome_note.htm	Fri Apr 24 10:31:21 2009 -0500
+++ b/core/com.nokia.carbide.cpp/html/welcome_note.htm	Mon Apr 27 15:07:35 2009 -0500
@@ -7,8 +7,8 @@
   <link href="../book.css" rel="stylesheet" type="text/css">
 </head>
 <body>
-<h2>Welcome to Carbide.c++ 2.0.4 </h2>
-<p>Thank you for installing Carbide.c++2.0! It's an improvement over 1.3.1 with many improvements to connecting and debugging on devices, faster downloading of  large SIS files, improved program counter control, C/C++ indexer improvements, and is based on the latest Eclipse and CDT updates (Ganymede). </p>
+<h2>Welcome to Carbide.c++ 2.1.0</h2>
+<p>Thank you for installing Carbide.c++2.1! It's an improvement over 2.0 with many improvements including editor hover help and numerous bug fixes. </p>
 <p>However, perhaps the best part about Carbide.c++ is the Carbide.c++ Plug-in SDK that you can use to build custom extensions for Carbide.c++. Take a look, and let us know what you built!</p>
 <p>Finally, if you find bugs, please let us know by submitting it at the new Carbide Bugzilla bug tracking site located at <a href="https://xdabug001.ext.nokia.com/bugzilla">https://xdabug001.ext.nokia.com/bugzilla</a> </p>
 <p>For any other questions, please don't hesitate to contact us.</p>
--- a/core/com.nokia.carbide.cpp/plugin.xml	Fri Apr 24 10:31:21 2009 -0500
+++ b/core/com.nokia.carbide.cpp/plugin.xml	Mon Apr 27 15:07:35 2009 -0500
@@ -29,7 +29,7 @@
 			value="Carbide.c++"/>
 		<property 
 			name="versionText" 
-			value="Version 2.0.4"/>
+			value="Version 2.1.0"/>
 		<property 
 			name="preferenceCustomization" 
 			value="plugin_customization.ini"/>
@@ -40,7 +40,7 @@
 		<!-- Product attributes that support themes and universal intro -->
 		<property
 			name="introTitle"
-			value="Carbide.c++ v2.0.4 for Symbian"/>
+			value="Carbide.c++ v2.1.0 for Symbian"/>
 		<property
 			name="introBrandingImage"
 			value="product:themes/carbide/graphics/root/brandmark.gif"/>
Binary file core/com.nokia.carbide.cpp/splash.bmp has changed
Binary file core/com.nokia.carbide.cpp/themes/carbide/graphics/contentpage/background.jpg has changed
Binary file core/com.nokia.carbide.cpp/themes/carbide/graphics/root/background.jpg has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/ATFLaunchSupport.java	Mon Apr 27 15:07:35 2009 -0500
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+package com.nokia.cdt.internal.debug.launch;
+
+import org.eclipse.debug.core.model.IDebugTarget;
+
+public class ATFLaunchSupport {
+	// Pass to IDebugTarget the outside world (e.g. test framework), it is dropped by Eclipse core debugger
+	private static IDebugTarget debugTargetFromLaunchDelegate = null;
+	
+	/**
+	 * Pass debug target from LaunchDelegate to outside world (e.g. test framework)
+	 * We read and clear to save us the hassle of clearing before each usage.
+	 */
+	public static IDebugTarget getAndClearDebugTargetFromLaunchDelegate() {
+		IDebugTarget result = debugTargetFromLaunchDelegate;
+		debugTargetFromLaunchDelegate = null;
+		return result;
+	}
+
+	/**
+	 * Saves debug target from LaunchDelegate to outside world (e.g. test framework)
+	 */
+	public static void saveDebugTargetFromLaunchDelegate(IDebugTarget debugTarget) {
+		debugTargetFromLaunchDelegate = debugTarget;
+	}
+
+}
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/EmulationLaunchDelegate.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/EmulationLaunchDelegate.java	Mon Apr 27 15:07:35 2009 -0500
@@ -57,6 +57,7 @@
 import com.freescale.cdt.debug.cw.DebuggerLog;
 import com.freescale.cdt.debug.cw.core.cdi.ISessionListener;
 import com.freescale.cdt.debug.cw.core.cdi.Session;
+import com.freescale.cdt.debug.cw.core.cdi.model.Target;
 import com.freescale.cdt.debug.cw.core.settings.DebuggerCommonData;
 import com.freescale.cdt.debug.cw.core.ui.console.LoggingConsole;
 import com.nokia.cdt.debug.cw.symbian.SettingsData;
@@ -158,7 +159,8 @@
 							
 							File wd = getWorkingDirectory(config);
 							long t = System.currentTimeMillis();
-							cwDebugSession.launchExecutable(launch, config, exeFile, otherExecutables, arguments, wd, getEnvironmentAsProperty(config), monitor, project, renderTargetLabel(debugConfig), true);
+							Target target = cwDebugSession.launchExecutable(launch, config, exeFile, otherExecutables, arguments, wd, getEnvironmentAsProperty(config), monitor, project, renderTargetLabel(debugConfig), true);
+							ATFLaunchSupport.saveDebugTargetFromLaunchDelegate(target.getCoreModelTarget());
 							t = System.currentTimeMillis() - t;
 //							System.out.println("launchExecutable returns in : " + t);
 							DebuggerLog.log("launchExecutable returns in : " + t);
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/SophiaSTILaunchDelegate.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/SophiaSTILaunchDelegate.java	Mon Apr 27 15:07:35 2009 -0500
@@ -38,6 +38,7 @@
 
 import com.freescale.cdt.debug.cw.CWException;
 import com.freescale.cdt.debug.cw.core.cdi.Session;
+import com.freescale.cdt.debug.cw.core.cdi.model.Target;
 import com.nokia.cdt.debug.cw.symbian.SettingsData;
 import com.nokia.cdt.debug.cw.symbian.SymbianPlugin;
 
@@ -107,7 +108,8 @@
 								config = synchronizeWithProjectAccessPaths(project, config);
 								
 								File wd = getWorkingDirectory(config);
-								cwDebugSession.launchExecutable(launch, config, exeFile, otherExecutables, arguments, wd, getEnvironmentAsProperty(config), monitor, project, getTargetLabel(exeFile.getName()), true);
+								Target target = cwDebugSession.launchExecutable(launch, config, exeFile, otherExecutables, arguments, wd, getEnvironmentAsProperty(config), monitor, project, getTargetLabel(exeFile.getName()), true);
+								ATFLaunchSupport.saveDebugTargetFromLaunchDelegate(target.getCoreModelTarget());
 
 							} catch (CoreException e) {
 								Session session = (Session)dsession;
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/TRKLaunchDelegate.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/TRKLaunchDelegate.java	Mon Apr 27 15:07:35 2009 -0500
@@ -32,6 +32,7 @@
 import com.freescale.cdt.debug.cw.CWException;
 import com.freescale.cdt.debug.cw.core.RemoteConnectionsTRKHelper;
 import com.freescale.cdt.debug.cw.core.cdi.Session;
+import com.freescale.cdt.debug.cw.core.cdi.model.Target;
 import com.nokia.carbide.cdt.builder.CarbideBuilderPlugin;
 import com.nokia.carbide.cdt.builder.builder.CarbideCPPBuilder;
 import com.nokia.carbide.cdt.builder.project.ICarbideBuildConfiguration;
@@ -159,8 +160,9 @@
 							config = synchronizeWithProjectAccessPaths(project, config);
 							
 							File wd = getWorkingDirectory(config);
-							cwDebugSession.launchExecutable(launch, config, exeFile, otherExecutables, arguments, wd, getEnvironmentAsProperty(config), monitor, project, getTargetLabel(exeFile.getName()), true);
-
+							Target target = cwDebugSession.launchExecutable(launch, config, exeFile, otherExecutables, arguments, wd, getEnvironmentAsProperty(config), monitor, project, getTargetLabel(exeFile.getName()), true);
+							ATFLaunchSupport.saveDebugTargetFromLaunchDelegate(target.getCoreModelTarget());
+							
 						} catch (CoreException e) {
 							Session session = (Session)dsession;
 							session.cleanupAfterLaunchFailure();
--- a/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/Trace32LaunchDelegate.java	Fri Apr 24 10:31:21 2009 -0500
+++ b/debuggercdi/com.nokia.cdt.debug.launch/src/com/nokia/cdt/internal/debug/launch/Trace32LaunchDelegate.java	Mon Apr 27 15:07:35 2009 -0500
@@ -38,6 +38,7 @@
 
 import com.freescale.cdt.debug.cw.CWException;
 import com.freescale.cdt.debug.cw.core.cdi.Session;
+import com.freescale.cdt.debug.cw.core.cdi.model.Target;
 import com.nokia.cdt.debug.cw.symbian.SettingsData;
 import com.nokia.cdt.debug.cw.symbian.SymbianPlugin;
 
@@ -110,7 +111,8 @@
 								config = synchronizeWithProjectAccessPaths(project, config);
 								
 								File wd = getWorkingDirectory(config);
-								cwDebugSession.launchExecutable(launch, config, exeFile, otherExecutables, arguments, wd, getEnvironmentAsProperty(config), monitor, project, getTargetLabel(exeFile.getName()), true);
+								Target target = cwDebugSession.launchExecutable(launch, config, exeFile, otherExecutables, arguments, wd, getEnvironmentAsProperty(config), monitor, project, getTargetLabel(exeFile.getName()), true);
+								ATFLaunchSupport.saveDebugTargetFromLaunchDelegate(target.getCoreModelTarget());
 
 							} catch (CoreException e) {
 								Session session = (Session)dsession;