You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@etch.apache.org by jd...@apache.org on 2009/04/22 19:25:51 UTC

svn commit: r767594 [7/43] - in /incubator/etch/trunk/binding-c/runtime/c: ./ ext/ ext/hashtab/ ext/lib/ inc/ lib/ project/ project/$etchstop/ project/bin/ project/etch/ project/logcli/ project/logsrv/ project/notes/ project/test/ project/test/logcli/ ...

Added: incubator/etch/trunk/binding-c/runtime/c/inc/etchutl.h
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-c/runtime/c/inc/etchutl.h?rev=767594&view=auto
==============================================================================
--- incubator/etch/trunk/binding-c/runtime/c/inc/etchutl.h (added)
+++ incubator/etch/trunk/binding-c/runtime/c/inc/etchutl.h Wed Apr 22 17:25:43 2009
@@ -0,0 +1,92 @@
+/* $Id$ 
+ * 
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
+ * contributor license agreements. See the NOTICE file distributed with  
+ * this work for additional information regarding copyright ownership. 
+ * The ASF licenses this file to you under the Apache License, Version  
+ * 2.0 (the "License"); you may not use this file except in compliance  
+ * with the License. You may obtain a copy of the License at 
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and 
+ * limitations under the License. 
+ */ 
+
+/*
+ * etchutl.h -- utility methods
+ */
+
+#ifndef ETCHUTL_H
+#define ETCHUTL_H
+
+#include "etch_arrayval.h"
+#include "etchhash.h"
+
+#define ETCH_ARRAYTYPE_NONE     0
+#define ETCH_ARRAYTYPE_NATIVE   1
+#define ETCH_ARRAYTYPE_LIST     2
+#define ETCH_ARRAYTYPE_ARRAYVAL 3
+
+typedef struct etch_arrayinfo
+{
+    int numdims;
+    int numitems;
+    unsigned char array_type;
+    unsigned char is_content_object;
+
+} etch_arrayinfo;
+
+
+etch_arraylist* get_map_keys(etch_hashtable*);
+
+etch_arraylist* get_map_values(etch_hashtable*);
+
+int is_etcharray(objmask*, etch_arrayinfo*);
+
+int hexchar_to_int (const unsigned char hexchar);
+int hexwchar_to_int(const wchar_t hexwchar);
+
+int etchlog_countfiles(char* dirpath);  
+int etchlog_purgefiles(char* dirpath, const int, const int);
+int etch_existsfile(char* path);
+
+
+#if IS_WINDOWS_ETCH
+ 
+/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ * etch windows emulation of POSIX directory browsing functions  
+ * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ */
+
+typedef struct dirent  /* directory entry descriptor */
+{ /* *nix includes various other fields but dirent.d_name is usual reference 
+   * and using it as our only field lets us cast a string to a dirent* 
+   */
+  wchar_t d_name [MAXPATHSIZE+1];
+} dirent;
+
+
+typedef struct DIR  /* "directory stream" descriptor */
+{
+  void*   dirhandle;  /* HANDLE */
+  wchar_t dirname[1];
+} DIR;
+
+
+DIR*    opendir  (char *dirname);
+dirent* readdir  (DIR*);
+int     closedir (DIR*);
+void    rewinddir(DIR*);
+
+#else  /* IS_WINDOWS_ETCH */
+
+#include "dirent.h" /* linux opendir, readir, etc. */
+
+#endif /* IS_WINDOWS_ETCH */
+
+
+#endif /* #ifndef ETCHUTL_H */
\ No newline at end of file

Added: incubator/etch/trunk/binding-c/runtime/c/inc/etchwarn.h
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-c/runtime/c/inc/etchwarn.h?rev=767594&view=auto
==============================================================================
--- incubator/etch/trunk/binding-c/runtime/c/inc/etchwarn.h (added)
+++ incubator/etch/trunk/binding-c/runtime/c/inc/etchwarn.h Wed Apr 22 17:25:43 2009
@@ -0,0 +1,25 @@
+/* $Id$ 
+ * 
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
+ * contributor license agreements. See the NOTICE file distributed with  
+ * this work for additional information regarding copyright ownership. 
+ * The ASF licenses this file to you under the Apache License, Version  
+ * 2.0 (the "License"); you may not use this file except in compliance  
+ * with the License. You may obtain a copy of the License at 
+ * 
+ * http://www.apache.org/licenses/LICENSE-2.0 
+ * 
+ * Unless required by applicable law or agreed to in writing, software 
+ * distributed under the License is distributed on an "AS IS" BASIS, 
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and 
+ * limitations under the License. 
+ */ 
+
+#ifndef _UNICODE
+#pragma message("WARNING: _UNICODE not defined")
+#endif
+
+#ifndef UNICODE
+#pragma message("WARNING: UNICODE not defined")
+#endif
\ No newline at end of file

Added: incubator/etch/trunk/binding-c/runtime/c/project/$etchstop/$etchstop.vcproj
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-c/runtime/c/project/%24etchstop/%24etchstop.vcproj?rev=767594&view=auto
==============================================================================
--- incubator/etch/trunk/binding-c/runtime/c/project/$etchstop/$etchstop.vcproj (added)
+++ incubator/etch/trunk/binding-c/runtime/c/project/$etchstop/$etchstop.vcproj Wed Apr 22 17:25:43 2009
@@ -0,0 +1,208 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="$etchstop"
+	ProjectGUID="{F6652EA0-E9D5-4BBF-A31E-650F79163D0B}"
+	RootNamespace="etchstop"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="&quot;$(APRPATH)\inc&quot;"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB;APR_DECLARE_STATIC"
+				MinimalRebuild="false"
+				ExceptionHandling="0"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				WarnAsError="true"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="1"
+				CompileAs="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				AdditionalOptions="/NODEFAULTLIB:LIBCMTD"
+				AdditionalDependencies="apr-1.lib WS2_32.LIB"
+				LinkIncremental="1"
+				AdditionalLibraryDirectories="&quot;$(APRPATH)\lib&quot;"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="1"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLinkerTool"
+				LinkIncremental="1"
+				GenerateDebugInformation="true"
+				SubSystem="1"
+				OptimizeReferences="2"
+				EnableCOMDATFolding="2"
+				TargetMachine="1"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCManifestTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCAppVerifierTool"
+			/>
+			<Tool
+				Name="VCWebDeploymentTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<File
+				RelativePath="..\..\src\support\etch_stop.c"
+				>
+			</File>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+			<File
+				RelativePath="..\..\..\..\..\..\..\..\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Lib\MsWSock.Lib"
+				>
+			</File>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>

Added: incubator/etch/trunk/binding-c/runtime/c/project/debugnotes.txt
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-c/runtime/c/project/debugnotes.txt?rev=767594&view=auto
==============================================================================
--- incubator/etch/trunk/binding-c/runtime/c/project/debugnotes.txt (added)
+++ incubator/etch/trunk/binding-c/runtime/c/project/debugnotes.txt Wed Apr 22 17:25:43 2009
@@ -0,0 +1,474 @@
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
+I M M E D I A T E   T O D O
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
+O P E N   B U G S
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+BUG: DEADEND LEAK IN SERVER WHEN A MESSAGE IS REJECTED
+==========================================================
+description
+-----------
+when a message arrives at server, and is rejected (forwarded), the message leaks.
+
+symptoms
+---------
+leaks are logged
+
+analysis
+----------
+message is i believe session_notify()'ed, and is apparently never destroyed at that terminal.
+
+
+
+BUG: CLIENT READ THREAD DESTRUCTION EXCEPTION IN destroy_hashtable()
+=====================================================================
+
+SYMPTOMS
+1. usually happens in destroy_plainmailboxmgr()::ETCHOBJ_DESTROY(thisx->mailboxes);  
+   but if this is commented out, will occur at some other destroy_hashtable().
+   
+2. occurs at the jenkins refree:: free(x); call which exceptions in crt _output_l()
+   trying to write some humongous text.
+   
+ANALYSIS
+1. the fact that it exceptions somewhere else when we comment out the exception call,
+   may mean that we have recently corrupted the heap.
+   a. back up from crash and try to find where heap may have been clobbered.
+   
+2. it always happens on the stress run, even with a single message, but 
+   it does not *usually* occur during the singles run, so what is the defining event?  
+   
+3. it does not occur outside the debugger. 
+   it always occurs in the debugger, at ETCHOBJ_DESTROY(thisx->mailboxes);  
+   
+4. call stack:   
+   perftest_threadproc_add():
+      a. result = remote->remote_base->start_waitup (remote->remote_base, p->waitms);
+      b. etch_int32* resultobj = remote->add (remote, new_int32(1000000000), new_int32(2000000000));
+      c. ETCHOBJ_DESTROY(resultobj);
+      d. result = remote->remote_base->stop_waitdown (remote->remote_base, p->waitms);
+   perftest_threadproc_add():               calls ETCHOBJ_DESTROY(remote);
+   destroy_perf_remote_server()             calls ETCHOBJ_DESTROY(thisx->client_factory);
+   destroy_etch_client_factory()            calls ETCHOBJ_DESTROY(thisx->dsvc);   
+   destroy_delivery_service_via_interface() calls deliveryservice_implobj->destroy (deliveryservice_implobj);
+   destroy_tcp_delivery_service()           calls ETCHOBJ_DESTROY(((etch_mailbox_manager*) thisx->mailboxmgr));
+   destroy_plainmailboxmgr()                calls ETCHOBJ_DESTROY(thisx->mailboxes);
+   destroy_hashtable_default()              calls destroy_hashtable
+   destroy_hashtable()                      calls map->vtab->hdestroy(map->realtable)
+   jenkins_destroy()                        calls hdestroy((htab*) realtable); 
+   hdestroy()                               calls refree()
+   refree()                                 calls free()
+   free()                                   calls _free_dbg()
+   _free_dbg()                              calls HeapFree()
+   msvcr80d.dll::_output_l                  crashes
+   
+5. experiment to remove stop_waitdown() from perftest_threadproc_add()
+   to see if exception stops.
+   a. if exception does stop, the stop_waitdown() clobbered the heap.
+   b. first thing we noticed was that with stop_waitdown() removed, the behavior was unchanged
+      outside the debugger, i.e., no leaks, good result.   
+   c. however inside the debugger, the exception happens at the same spot.
+   d. CONCLUSION: the problem must be higher in perftest_threadproc_add()
+   
+6. log state on breaking just prior to ETCHOBJ_DESTROY(remote):
+    0202 165504 CONX D connxn 1 start receive pump
+    0202 165504 CONX D connxn 1 thread 1 receiving ...
+    0202 165504 CONX X connxn 1 begin blocking receive ...
+    0202 165506 CONX X connxn 1 begin send
+    0202 165506 CONX D connxn 1 end send 46 bytes
+    0202 165508 TRAN X reading mailbox (wait 3000) ...
+    0202 165508 CONX D connxn 1 end receive 46 bytes
+    0202 165508 MBOX X etchmbox_message acquiring mailbox read lock
+    0202 165510 MBOX X tcpdelsvc_endcall acquiring mailbox read lock
+    0202 165510 MBOX X etchmbox_message releasing mailbox read lock
+    0202 165510 MBOX X tcpdelsvc_endcall releasing mailbox read lock
+    0202 165510 CONX D connxn 1 thread 1 receiving ...
+    0202 165510 CONX X connxn 1 begin blocking receive ...
+    
+7. experiment: try removing read lock set and reset  
+   a. tried that but it reintroduced the race condition crash that existed before we put the locks in. 
+   
+8. experiment: try removing the remote->add and just do the start and stop.
+   a. OK that gets rid of the exception at the ETCHOBJ_DESTROY(remote); hdestroy(); jenkhtab::refree() calls;
+   b. this is a good clue
+   c. now add stuff back - first determine what we are in process of freeing at the exception,  
+      then find where this gets previously freed after remote->add  
+   d. ETCHOBJ_DESTROY(mboxmgr->mailboxes);  
+   e. find the destructor being called and breakpoint there to see if called twice      
+      dtor is just destroy_hashtable
+   f. so instead, find where "mailboxes" is instantiated, save the pointer globally,
+      and in destroy_hashtable, test to see if hashtable is that global address.
+   g. when we remove the particular hdestroy(), the crash simply moves elsewhere to a HeapAlloc() or a HeapFree.
+      meaning the problem is not with a hashtable at all, it is due to a corrupt heap.
+   h. ask: what is the diff between the verify tests and this stress test call?
+      run a verify add() again and see if the same heap problem exists. yes, it exists there as well.
+      
+9. FOUND CODE triggering heap corruption
+   ----------------------------------------------
+   *** if we comment out the imailbox free the heap corruption is no longer evident however the imailbox object leaks.
+   *** perhaps then this free is not the actual problem but somehow triggers the problem.
+   xmpl_perf_remote_server::perf_remote_add()
+        result = perf_remote_dispose_mailbox (thisx, &mbox);  
+           int destroy_mailbox(etch_plainmailbox* thisx)
+               etch_free(thisx->imailbox);  // comment out and heap issue gone but this item leaks
+               
+10. TEST POINTS   
+
+    0.  xmpl_perf_client_main.c:: int _tmain (int argc, _TCHAR* argv[]) 
+            result = perf_xmpl_test_server (uri, new_perf_client, waitms);             
+    
+    1.  xmpl_perf_client_tests.c:: int perf_xmpl_test_server (wchar_t* uri, new_client_funcptr user_ctor, const int waitms)
+        #if(1)
+        etchlog (ETCHTEST, ETCHLOG_INFO, "run perf add test ...\n");
+        result = run_perftest ("add", uri, waitms, runtime, trials, numthreads, 
+            perftest_threadproc_add, user_ctor);
+        #endif   
+        
+    2. xmpl_perf_client_tests.c:: int run_perftest (char* descr, wchar_t* uri, const int waitms, const int runtime, 
+       const int count, const int threads, perftest_threadproc testproc, new_client_funcptr new_perfclient)
+       
+        //mask = "%s %d took %f -- trying %d to get >= 1 second\n";
+        //while(time < 1.0)
+        //{
+        //    if (time > 0.1)
+        //        etchlog(ETCHTEST, ETCHLOG_INFO, mask, descr, oldn, time, n);
+        //    oldn = n;
+        //    time = perftest_run_one(&perftest, n, testproc);
+        //    n *= 2;
+        //}
+        n = oldn;
+        
+        
+    3. xmpl_perf_client_tests.c::  int perftest_threadproc_add (perftestobj* p)
+       //while(iterations--)  /* execute perf.add() n times */
+       //{
+       //    etch_int32* resultobj = remote->add (remote, new_int32(1000000000), new_int32(2000000000));
+       //    assert(resultobj);
+       //    ETCHOBJ_DESTROY(resultobj);
+       //}
+      
+      
+   4. perf_remote_server.c:: etch_int32* perf_remote_add (perf_remote_server* thisx, etch_int32* x, etch_int32* y) 
+   
+       i_mailbox* mbox = perf_remote_add_begin (thisx, x, y);
+    
+       if (mbox)
+       {   // TESTING NOTE we can comment the _end() call out without leaking anything
+           resultobj = perf_remote_add_end (thisx, mbox);  
+    
+           // another thing to try - comment prior mailbox access to see if problem is there.
+           result = perf_remote_dispose_mailbox (thisx, &mbox);   
+       }             
+   
+
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
+F I X E D   B U G S
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -     
+
+BUG: CLIENT MAILBOX READ TIMEOUT     ***  F I X E D  ***
+=================================
+
+description
+-----------
+a. there is a race condition wherein a mailbox write does not complete thru notify
+   before a mailbox read completes and the service destroys itself.
+   mutexes and waits do not seem to work, they deadlock, apparently on same thread.
+   we added a sleep in stop_perf_client() to see if this forces write to complete.
+   however we would prefer to have write complete before read starts.
+   *** could we possibly signal the read wait when we finish writing, rather than
+   at etchqueue_put_withwait(), earlier in the same function (etchmbox_message)?
+   currently etch_apr_queue_push() does apr_thread_cond_signal(queue->not_empty);
+   we would have to pull this way out to the tcp client receive listener on_data call,
+   in order to leave as little of the write stack as possible unwound after the
+   mailbox read kicks in and completes.  see Q: who calls etchmbox_message()
+   for the entire call stack from mailbox down to receive listener proc.   
+   
+   HOW ABOUT if we establish a callback on the mailbox close which accesses the
+   mutex? need to start at "stopping perf client ..." and find the best spot
+   on the main thread to wait on the mutex set in mailbox.message().
+   
+   if we can pass a mutex into perf from client main, which get acquired in etchmbox_message(),
+   we can also acquire it in stop_perf_client(), which causes the thread to continue.
+   first trace start_perf_client to see how we can get the mutex up to the mailbox.
+   
+   we should pass the mutex in via the parameter bundle.
+   we should still be able to prevent reads from occuring until write has completed and vv,
+   but we need to find where we can lock the read from outside of the receive thread, to do so.
+   this should be in tcpdelsvc_endcall()
+   
+b. if the mailbox read times out, the message leaks. seems to be just the message, not wrapper.
+   it would seem that the message is eventually in the mailbox however, is it?
+   if so it should be wrapped but also should be destroyed with the mailbox.
+   if not, what happens to the message?  
+   ideally the message is either redelivered, destroyed if not redelivered, or remains
+   in the mailbox and is destroyed with the mailbox. so why does the message leak?  
+   
+notes - leak case
+-----------------
+___ in etch_plainmailbox.c: etchmbox_read_result()
+    *out = new_mailbox_element (NULL, NULL); **** LEAKS ****
+___ in perf_remote_server.c: perf_remote_add_end()
+    we return the leaked object to perf_remote_add()
+___ in perf_remote_server.c: perf_remote_add()
+    we return the leaked object to perf_xmpl_verify_server()
+___ in perf_xmpl_verify_server()
+    the leaked object is addresult. we ETCHOBJ_DESTROY(addresult); 
+
+todo
+------------          
+___ the short-circuited code is in etchremote_stop_waitdown. NO LONGER SHORTED
+___ etch_tcpconx_transport_control CLASSID_CONTROL_STOP now if client does etch_tcpclient_stop_listener,
+    it appears as if either client or server can just do etch_tcpconx_close()
+___ after etch_tcpconx_closem etch_tcpclient object can perhaps be destroyed in perf_remote_server destructor
+    which is invoked from [main]. 
+___ mailbox read times out even though wait is infinite. THOUGHT 2B FIXED BUT STILL TIMES OUT 50% OF TIME
+    a. first do mailbox test to test wait mechanism  ALL TESTS PASS INCLUDING READ WAITS
+    b. test wait ms -1 OK this means DO NOT WAIT
+    c. then trace start waitup 
+___ determine where waitms gets set to -1, since it starts out zero  
+    NO IT DOES NOT it is the start/wait that is zero, the mailbox wait is per-type.
+    we now specify ETCH_DEFAULT_MAILBOX_READ_WAITMS to force a short wait.    
+      
+to investigate:
+---------------
+___ see redeliver() in etchmbox_close_read() for possible leaks.
+OK_ TODO close the socket forcibly instead of sending data, in etch_tcpclient_stop_listener
+___ there may be connection closes and mailbox reads going on at the same time, investigate and synchronize perhaps.
+    we've got a stop_perf_client() going on on top of a mbox.close_read(). the stop_perf_client() closes the client listener,
+    the close_read closes what?
+               
+   
+   
+        
+BUG: URI DISAPPEARS AFTER ONE ROUND TRIP TO SERVER   * * *  F I X E D  * * *
+================================================== 
+description
+-----------  
+the uri allocated on the stack in main is no longer present after one test.
+    
+analysis
+--------
+it may be the case that it is simply cleared out by the URL parser. investigate.
+
+call sequence
+-------------
+1.   _tmain
+2.   perf_xmpl_test_server(uri)
+3.   run_perftest("add", uri, perftest_threadproc_add);
+4.   perftest_run_one(perftestparams, perftest_threadproc_add)
+5.   perftest_run_threads(perftestparams, perftest_threadproc_add)
+6.   perftest_threadproc_add
+7.   perf_remote_server* remote = new_remote_server (p->uri, impl_factory);
+8.   deliverysvc = new_etch_transport (uri, (etch_factory_params*) p, NULL); 
+9a.  etch_url* url = new_url(uri); 
+9b.  i_delivery_service* newds = new_etch_transport_a (url, params, conximpl); 
+     uri is still OK to this point. it is 0x00454070
+9c.  url->destroy(url);
+     uri is still OK
+10.  (perf_remote_add) i_mailbox* mbox = perf_remote_add_begin (thisx, x, y);
+11.  (perf_remote_add) resultobj = perf_remote_add_end (thisx, mbox);  
+      uri is still OK
+12.  (perf_remote_add) perf_remote_dispose_mailbox (thisx, &mbox);   
+13.  (perftest_threadproc_add) return from etch_int32* resultobj = remote->add (remote, ...));  
+14.  (perftest_threadproc_add) ETCHOBJ_DESTROY(remote);  
+15.  (destroy_perf_remote_server) ETCHOBJ_DESTROY(thisx->remote_base); 
+16.  (destroy_perf_remote_server) ETCHOBJ_DESTROY(thisx->server_base); 
+17.  (destroy_perf_remote_server) ETCHOBJ_DESTROY(thisx->client_factory);
+18.  (etch_transport.c destroy_etch_client_factory) 
+19.  (etch_transport.c destroy_etch_client_factory ETCHOBJ_DESTROY(thisx->dsvc); 
+20.  (etch_transport.c destroy_tcp_delivery_service) ETCHOBJ_DESTROY(((etch_mailbox_manager*) thisx->mailboxmgr));
+      *** the above triggers the stack problem - note that we previously destroyed the mailbox in (12), this is significant.
+21.  (destroy_etch_client_factory) uri is still OK after destroying the delivery service.
+22.  (xmpl_perf.client_tests.c perf_xmpl_test_server) i is now 1, numthreadcounts is now 2, uri is still OK  
+      run_perftest ("add", uri, perftest_threadproc_add);   see (3) 
+23.  (xmpl_perf.client_tests.c run_perftest) perftest_run_one (perftest_threadproc_add);  
+24.  (xmpl_perf.client_tests.c perftest_run_one) perftest_run_threads  (perftestobj, perftest_threadproc_add)
+      note that uri is still good and that perftestobj.uri is 0x00454070
+24.  (xmpl_perf.client_tests.c perftest_run_threads)  
+         for(; i < p->threads; i++) etch_thread* newthread = pool->run (pool, runner, p);
+25.  (etch_thread.c etch_threadpool_run_freethread)
+26.  (etch_threadpool_run_freethread) newthread->start (newthread);    
+27.  (xmpl_perf.client_tests.c perftest_threadproc_add (perftestobj* p))  // OK the perftestobj here is now invalid
+        perf_remote_server* remote = new_remote_server (p->uri, impl_factory); 
+      NOTE that the original uri memory is still OK, but the perftestobj object passed to the threadproc is bad, 
+      therefore the uri extracted from this object is garbage. 
+      **** THE PROBLEM is that etch_apr_threadproc passes etch_threadparams* to the threadproc, (perftestobj is params.data)
+      whereas when we're unthreaded we pass a perftestobj         
+      
+   
+   
+BUG: ETCH HEAP ERROR AFTER DESTROYING CLIENT RESOURCES   * * *  F I X E D  * * *
+=======================================================
+description
+-----------  
+when a client runs a service on simultaneous threads, all threads after the first crash on 
+etch_transport::destroy_etch_client_factory(): ETCHOBJ_DESTROY(thisx->in_resx);  
+WRONG: actually the crash is in the perftest_threadproc_add thread, since threadparams.is_own_data = TRUE,
+we etch_free(userdata). recall that userdata is the perftestobj. 
+
+symptoms
+---------
+0211 150537 TRAN D destroying resources ...
+0211 150537 MEMX E etch heap tracking store missing key '0012feb8' 
+
+analysis
+---------
+the same resources are passed to all threads. one or more objects in resources are destroyed in the first thread
+and then an ateempt is made to destroy them again.  
+a. eventually we want to get rid of the reources map, not sure if this is the time to do so.
+b. explore possibility of factory not owning resources.
+   1. Q: where is client factory allocated/populated?
+      A: etch_transport::new_client_factory (objmask* session, i_session* isession, new_client_funcptr) 
+         called from: helper::start_perf_client (wchar_t* uri, new_client_funcptr); 
+         HOWEVER resources have not been populated yet.
+   2. Q: where are resources populated to client factory?
+      A: helper::new_remote_server (uri, etch_client_factory)
+         there does not seem to be anything volatile populated in resources there
+   3. Q: what does the resx destruction crash on?
+      A: it doesn't. the crash is on the message thread exit, when the thread exit handler frees userdata.
+         and userdata is the perftestobj.
+   4. Q: where is the perftestobj allocated?
+      A: it is allocated on the run_perftest() stack (!!!!)
+   5. Q: since it is on the stack, why didn't it crash on the main thread test?
+      A: because the main thread test does not go thru the thread exit proc.
+   6: Q: should we try to clone the user params, or should we set the thread to not destroy params?
+      A: threadpool.is_free_data *should* control whether the pool's threads free their userdata.
+         THAT FIXED IT!
+
+ 
+BUG: FOPEN() ABSOLUTE PATHS CHANGE WHEN RUNNING IN DEBUGGER   * * *  F I X E D  * * *
+============================================================
+description
+-----------
+when running from command line, "../logsrv/etchserver.log" is "C:\workspace\etch\src\etch\bindings\c\project\logsrv"
+when running in debugger, it is "C:\workspace\etch\src\etch\bindings\c\project\xamples\xmpl_perf\xmpl_perf_server\logsrv"
+NOTE that this will be a similar problem for the config file.
+
+symptoms
+---------
+fails to open log file, since subdirectory does not exist.
+
+analysis
+----------
+possible solution 1: ensure directory exists using c runtime 
+possible solution 2: don't use a subdirectory, use file extensions of ".srvlog" and ".clilog"
+
+resolution
+----------
+1. create log directory prior to log open ../srvlog or ../clilog
+2. expect config file in ../etch-c-server.properties or ../etch-c-client.properties
+
+
+
+BUG: LOG FILES WILL CONTINUE TO ACCUMULATE   * * *  F I X E D  * * *
+===========================================
+description
+-----------
+log files will accumulate in the log directories without manual intervention
+
+analysis
+----------
+need a logfile back filename generator
+need portable directory file enumeration code
+at startup or when log file lines exceed configured maximum, need code to rename log file to backup.
+when log file count exceeds configured maximum, need code to purge some number of files from log directory
+
+resolution
+----------
+1. coded and tested POSIX-style (dirent) functions for directory browsing (etchutl.h).
+   these are compiled in windows builds. presumably in linux builds the c runtime dirent functions will work the same.
+2. added code to create backup log file names
+3. added code to backup log files
+4. added code to purge log files
+
+   
+   
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
+F A Q
+- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
+
+Q: where do we catch mailbox read timeout?
+A: etch_transport::tcpdelsvc_endcall()  calls mbox->read_withwait ()
+
+Q: what is call stack prior leading up to mailbox read?
+A: perf_xmpl_verify_server() calls remote->add(1,2);
+   perf_remote_add()         calls perf_remote_add_end (mailbox
+   perf_remote_add_end()     calls remote_base->end_call (imailbox, &result);
+   etchremote_endcall()      calls deliveryservice->end_call(mailbox);
+   tcpdelsvc_endcall()       calls mailbox->read_withwait(timeoutms, &mailboxelt);
+   etchmbox_read_withwait()  calls etchqueue_get_withwait(delay, out);
+   etchqueue_get_withwait()  calls etch_apr_queue_pop(wait_usec, out);
+   
+Q: what is call stack for client data receive?
+A: etch_tcpclient_listenerproc
+   etch_tcpclient_on_data()
+   etch_pktizer_session_data
+   etch_msgizer_session_packet
+   pmboxmgr_session_message *** here we do pmboxmgr_get_mailbox() *** check if mbox closed here
+   etchmbox_message
+   etchmbox_fire_notify (etch_plainmailbox* thisx)
+   
+Q: what are values for infinite wait, and no wait?
+A: #define ETCH_INFWAIT  0
+   #define ETCH_NOWAIT (-1)
+   
+Q: where is timeout value for mailbox reads determined?
+A: tcpdelsvc_endcall() 
+   etch_type_impl* typeinfo = response_type? (etch_type_impl*) response_type->impl: NULL;
+   timeout = typeinfo->timeout > 0? typeinfo->timeout: ETCH_DEFAULT_MAILBOX_READ_WAITMS;  
+   
+Q: where is the message return object created, what is the return chain, and where is it destroyed?
+A: return object is created either in etchmbox_check_read_result(), called from etchmbox_read() 
+   or etchmbox_read_withwait(), or in etchmbox_message(), calling new_mailbox_element(), called 
+   when the message is queued to the mailbox. if the etchmbox_read is successful, the 
+   etch_mailbox_element return object is the object read from the mailbox queue, otherwise the
+   return object is instantiated only to host the resultant exception.
+   
+Q: who calls etchmbox_message() to queue a message to mailbox?
+A: pmboxmgr_session_message(), called by etch_msgizer_session_packet() via  
+      is_message_handled = (0 == thisx->session->session_message (thisx->session->thisx, whofrom, msg)); 
+   *** this is also where the inbound message is created and can be destroyed if unwanted
+   this is called by etch_pktizer_session_data via 
+      pzr->session->session_packet (pzr->session->thisx, whofrom, fbuf);
+   this is called by etch_tcpconxn.c::etch_tcpclient_on_data() via 
+       session->session_data (session->thisx, NULL, data)))
+   this is called by etch_tcpclient_listenerproc() via cx->on_data (cx, 0, result, fbuf);  
+   
+   SO the tcp receive listener is at the head of the stack, owning the call stack up through the
+   mailbox waiting to be unwound. IT WOULD BE GOOD IF WE COULD EXIT THIS THREAD FIRST rather than
+   last when we tear down. 
+   
+Q: where is inbound message created?  
+A: see previous question. 
+
+Q: what is the return path of an exception arriving at the client returned from a one-way message?
+A. * messagizer.session_packet  calls tdi.read_message().  
+   * messagizer.session_packet  calls session.session_message(), with the message.
+   * mailboxmgr.session_message calls get_mailbox(in_reply_to), returning error because there is none.
+   * messagizer.session_packet  calls session.session_notify(), passing a new unwanted message.
+   * mailboxmgr.session_notify  calls deliverysvc.session_notify().
+   * deliverysvc.session_notify calls stub.session_notify().  
+   * etchstub.session_notify    calls etchstub_session_notify_ex with the stub's _obj which is the EXECLIENTIMPL.
+   * etchstub_session_notify_ex gets the session callbacks from the client impl object.
+   * etchsession_def_session_notify destroys the payload (the exception message) and returns.
+     
+
+Q: what is call sequence for client main calling stop_xxxx_client()?
+A:   * etchremote_stop_waitdown()
+     * etchremote_transport_control()
+     * tcpdelsvc_transport_control()
+     * pmboxmgr_transport_control()
+     * msgizer_transport_control()
+     * pktizer_transport_control()
+     * tcpconx_transport_control()
+     * tcpclient_stop_listener()
+     * tcpconx_closex()
+    
+
+
+       
+   
+   
\ No newline at end of file

Added: incubator/etch/trunk/binding-c/runtime/c/project/etch-c-client.properties
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-c/runtime/c/project/etch-c-client.properties?rev=767594&view=auto
==============================================================================
--- incubator/etch/trunk/binding-c/runtime/c/project/etch-c-client.properties (added)
+++ incubator/etch/trunk/binding-c/runtime/c/project/etch-c-client.properties Wed Apr 22 17:25:43 2009
@@ -0,0 +1,21 @@
+# 
+# etch c binding client configuration file etch-c-client.properties
+# 
+
+logLevel = "X"                    # X, D, I, W, E
+memoryWatchID = 0                 # allocation ID for heap tracking: if > 0 DEBUGGER BREAK occurs
+isLogToFile = 1                   # (1/0) log to file 
+isLogToConsole = 1                # (1/0) log to console
+isDisplayMemoryLeakDetail = 1     # (1/0) log individual leaked memory allocations  
+isDestroyMessagesWithMailbox = 1  # (1/0) destroy any remaining messages when destroying mailbox  
+isValidateOnWrite = 1             # (1/0) invoke validators when writing message parameters
+defaultMailboxReadWaitms = 3000   # -1 no wait, 0 use internal default, > 0 timeout in millseconds
+sleepSecondsPriorClientExit = 0   # test client sleep after tests complete - normally zero
+
+testString = foobar; # should elicit semicolon warning from parser
+
+
+
+
+                  
+

Added: incubator/etch/trunk/binding-c/runtime/c/project/etch-c-server.properties
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-c/runtime/c/project/etch-c-server.properties?rev=767594&view=auto
==============================================================================
--- incubator/etch/trunk/binding-c/runtime/c/project/etch-c-server.properties (added)
+++ incubator/etch/trunk/binding-c/runtime/c/project/etch-c-server.properties Wed Apr 22 17:25:43 2009
@@ -0,0 +1,19 @@
+# 
+# etch c binding server side configuration file etch-c-server.properties
+# 
+
+logLevel = "X"                    # X, D, I, W, E
+memoryWatchID = 0                 # allocation ID for heap tracking: if > 0 DEBUGGER BREAK occurs
+isLogToFile = 1                   # (1/0) log to file 
+isLogToConsole = 1                # (1/0) log to console
+isDisplayMemoryLeakDetail = 1     # (1/0) log individual leaked allocations  
+isDestroyMessagesWithMailbox = 1  # (1/0) destroy any remaining messages when destroying mailbox  
+isValidateOnWrite = 1             # (1/0) invoke validators when writing message parameters
+
+# testString = foobar; # this line will elicit a semicolon warning from parser
+
+
+
+
+                  
+

Added: incubator/etch/trunk/binding-c/runtime/c/project/etch-c.sln
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-c/runtime/c/project/etch-c.sln?rev=767594&view=auto
==============================================================================
--- incubator/etch/trunk/binding-c/runtime/c/project/etch-c.sln (added)
+++ incubator/etch/trunk/binding-c/runtime/c/project/etch-c.sln Wed Apr 22 17:25:43 2009
@@ -0,0 +1,316 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "etch", "etch\etch.vcproj", "{858504A1-BA1B-47B1-834A-4993B633F9A4}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "xamples", "xamples", "{2DB68E23-7E57-4452-ADC2-D04797A03ED2}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "solution items", "solution items", "{DCC674BF-DBE1-4698-876C-C6D4A268FBEF}"
+	ProjectSection(SolutionItems) = preProject
+		notes\todo.txt = notes\todo.txt
+	EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "notes", "notes", "{26DD31E0-875A-44E7-9337-16691F60FC88}"
+	ProjectSection(SolutionItems) = preProject
+		notes\accepted.txt = notes\accepted.txt
+		notes\array.txt = notes\array.txt
+		notes\assignable.txt = notes\assignable.txt
+		notes\clientsession.txt = notes\clientsession.txt
+		debugnotes.txt = debugnotes.txt
+		notes\packet.txt = notes\packet.txt
+		notes\run.txt = notes\run.txt
+		notes\servexe.txt = notes\servexe.txt
+	EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{02B7DD4B-4770-4C31-968F-6FC9778782DC}"
+	ProjectSection(SolutionItems) = preProject
+		test\test-readme-first.txt = test\test-readme-first.txt
+	EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{4870CCF9-A246-4981-B22B-A59FE65EC087}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "message", "message", "{F7369390-5BAB-418C-823F-09E99AED521D}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "support", "support", "{F2178333-ED41-45CE-BC08-122362330563}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "transport", "transport", "{B273E98C-CCA4-49C4-A194-9EE529B800FF}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_allocator", "test\test_allocator\test_allocator.vcproj", "{9D561956-7962-45B7-9DFE-E3A114534CC7}"
+	ProjectSection(ProjectDependencies) = postProject
+		{858504A1-BA1B-47B1-834A-4993B633F9A4} = {858504A1-BA1B-47B1-834A-4993B633F9A4}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_arraylist", "test\test_arraylist\test_arraylist.vcproj", "{84DED881-0E5C-4218-B981-4F9D2E9448CA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_assignment", "test\test_assignment\test_assignment.vcproj", "{42A0BA98-B199-4CA0-AA59-6EDFF376E193}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_cache", "test\test_cache\test_cache.vcproj", "{5504E4BC-AA75-45F8-A8B4-060CE1B2E3AE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_etchobject", "test\test_etchobject\test_etchobject.vcproj", "{40FDF4B3-2C70-4213-819A-71ECBCC8CAF1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_flexbuf", "test\test_flexbuf\test_flexbuf.vcproj", "{8EBC71B4-992B-48C3-BAE0-2B00EB9DE2EB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_hashing", "test\test_hashing\test_hashing.vcproj", "{76BBAC3B-168E-4C52-9774-818730886537}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_hashtable", "test\test_hashtable\test_hashtable.vcproj", "{0129BDDD-C6EA-42B4-8941-C4D5281643D9}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_iterator", "test\test_iterator\test_iterator.vcproj", "{76B6EFEF-0C29-46C1-BEC8-9378847BBA86}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_arrayvalue", "test\test_arrayvalue\test_arrayvalue.vcproj", "{B1A0942D-9C49-4339-8CD8-A790D3AE573C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_binarytditdo", "test\test_binarytditdo\test_binarytditdo.vcproj", "{ADA0E60B-5592-44E3-8822-B392368776CB}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_defvalufact", "test\test_defvalufact\test_defvalufact.vcproj", "{ADDAC8DC-1E51-42DF-A81A-1775C7DBDF1D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_field", "test\test_field\test_field.vcproj", "{45DA3528-D67B-4564-93C0-AE5682AFD5B8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_idname", "test\test_idname\test_idname.vcproj", "{1DB7CDAF-62A1-425D-BC66-B7F4600637DA}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_message", "test\test_message\test_message.vcproj", "{0CAE3F5A-F353-4C9F-BCFE-E63B9E05C046}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_structvalue", "test\test_structvalue\test_structvalue.vcproj", "{0403656D-FE78-46AE-B7CF-5A42D3B1DDBC}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_type", "test\test_type\test_type.vcproj", "{98FA4624-86A2-40D5-B225-0ED6B8B05ECA}"
+	ProjectSection(ProjectDependencies) = postProject
+		{858504A1-BA1B-47B1-834A-4993B633F9A4} = {858504A1-BA1B-47B1-834A-4993B633F9A4}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_validator", "test\test_validator\test_validator.vcproj", "{EB6BFFFB-AFD9-4261-A18E-DA5B77C05045}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_stub", "test\test_stub\test_stub.vcproj", "{328CE2CF-B2C7-4236-9BC7-304FEB8C7282}"
+	ProjectSection(ProjectDependencies) = postProject
+		{858504A1-BA1B-47B1-834A-4993B633F9A4} = {858504A1-BA1B-47B1-834A-4993B633F9A4}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_mailboxmgr", "test\test_mailboxmgr\test_mailboxmgr.vcproj", "{F6E6F8C0-5A0B-45EE-B9E1-DABA41EA222B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_messagizer", "test\test_messagizer\test_messagizer.vcproj", "{262CF558-3BF6-4618-8DEE-1D0CB2B86221}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_packetizer", "test\test_packetizer\test_packetizer.vcproj", "{389AFED9-BBC0-40DA-B404-02B97F12CE17}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_plainmailbox", "test\test_plainmailbox\test_plainmailbox.vcproj", "{6C336037-08B2-4AA3-A11B-5613753F036D}"
+	ProjectSection(ProjectDependencies) = postProject
+		{858504A1-BA1B-47B1-834A-4993B633F9A4} = {858504A1-BA1B-47B1-834A-4993B633F9A4}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_queue", "test\test_queue\test_queue.vcproj", "{49F868CF-15AA-418C-A63F-76DD6DED477E}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_tcpconn", "test\test_tcpconn\test_tcpconn.vcproj", "{BA19E78D-4C03-4751-9538-42482BECFBD9}"
+	ProjectSection(ProjectDependencies) = postProject
+		{858504A1-BA1B-47B1-834A-4993B633F9A4} = {858504A1-BA1B-47B1-834A-4993B633F9A4}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_threadpool", "test\test_threadpool\test_threadpool.vcproj", "{55786A73-E53B-4AAA-B59E-E44A972B23B6}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_transport", "test\test_transport\test_transport.vcproj", "{EC735A75-FB7A-42A5-BB8F-2656EECC3239}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_url", "test\test_url\test_url.vcproj", "{C0B217EF-184F-4130-9379-0E2EC23830BA}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "xmpl_perf", "xmpl_perf", "{B5E41AA2-E7EB-46B5-B647-7444B4C93B06}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xmpl_perf_client", "xamples\xmpl_perf\xmpl_perf_client\xmpl_perf_client.vcproj", "{DE24F3F4-A5CB-43DE-9187-6F1846CB5A15}"
+	ProjectSection(ProjectDependencies) = postProject
+		{FE0F6ED2-5880-4FB8-9C62-917BE97712D5} = {FE0F6ED2-5880-4FB8-9C62-917BE97712D5}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xmpl_perf_server", "xamples\xmpl_perf\xmpl_perf_server\xmpl_perf_server.vcproj", "{D5EF8211-999C-4FB5-9218-DDCFD51D0611}"
+	ProjectSection(ProjectDependencies) = postProject
+		{FE0F6ED2-5880-4FB8-9C62-917BE97712D5} = {FE0F6ED2-5880-4FB8-9C62-917BE97712D5}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "test_remote", "test\test_remote\test_remote.vcproj", "{45456E09-7986-4697-ACEE-A717148636B1}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "$etchstop", "$etchstop\$etchstop.vcproj", "{F6652EA0-E9D5-4BBF-A31E-650F79163D0B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "xmpl_perflib", "xamples\xmpl_perf\xmpl_perflib\xmpl_perflib.vcproj", "{FE0F6ED2-5880-4FB8-9C62-917BE97712D5}"
+	ProjectSection(ProjectDependencies) = postProject
+		{858504A1-BA1B-47B1-834A-4993B633F9A4} = {858504A1-BA1B-47B1-834A-4993B633F9A4}
+	EndProjectSection
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Win32 = Debug|Win32
+		Release|Win32 = Release|Win32
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{858504A1-BA1B-47B1-834A-4993B633F9A4}.Debug|Win32.ActiveCfg = Debug|Win32
+		{858504A1-BA1B-47B1-834A-4993B633F9A4}.Debug|Win32.Build.0 = Debug|Win32
+		{858504A1-BA1B-47B1-834A-4993B633F9A4}.Release|Win32.ActiveCfg = Release|Win32
+		{858504A1-BA1B-47B1-834A-4993B633F9A4}.Release|Win32.Build.0 = Release|Win32
+		{9D561956-7962-45B7-9DFE-E3A114534CC7}.Debug|Win32.ActiveCfg = Debug|Win32
+		{9D561956-7962-45B7-9DFE-E3A114534CC7}.Debug|Win32.Build.0 = Debug|Win32
+		{9D561956-7962-45B7-9DFE-E3A114534CC7}.Release|Win32.ActiveCfg = Release|Win32
+		{9D561956-7962-45B7-9DFE-E3A114534CC7}.Release|Win32.Build.0 = Release|Win32
+		{84DED881-0E5C-4218-B981-4F9D2E9448CA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{84DED881-0E5C-4218-B981-4F9D2E9448CA}.Debug|Win32.Build.0 = Debug|Win32
+		{84DED881-0E5C-4218-B981-4F9D2E9448CA}.Release|Win32.ActiveCfg = Release|Win32
+		{84DED881-0E5C-4218-B981-4F9D2E9448CA}.Release|Win32.Build.0 = Release|Win32
+		{42A0BA98-B199-4CA0-AA59-6EDFF376E193}.Debug|Win32.ActiveCfg = Debug|Win32
+		{42A0BA98-B199-4CA0-AA59-6EDFF376E193}.Debug|Win32.Build.0 = Debug|Win32
+		{42A0BA98-B199-4CA0-AA59-6EDFF376E193}.Release|Win32.ActiveCfg = Release|Win32
+		{42A0BA98-B199-4CA0-AA59-6EDFF376E193}.Release|Win32.Build.0 = Release|Win32
+		{5504E4BC-AA75-45F8-A8B4-060CE1B2E3AE}.Debug|Win32.ActiveCfg = Debug|Win32
+		{5504E4BC-AA75-45F8-A8B4-060CE1B2E3AE}.Debug|Win32.Build.0 = Debug|Win32
+		{5504E4BC-AA75-45F8-A8B4-060CE1B2E3AE}.Release|Win32.ActiveCfg = Release|Win32
+		{5504E4BC-AA75-45F8-A8B4-060CE1B2E3AE}.Release|Win32.Build.0 = Release|Win32
+		{40FDF4B3-2C70-4213-819A-71ECBCC8CAF1}.Debug|Win32.ActiveCfg = Debug|Win32
+		{40FDF4B3-2C70-4213-819A-71ECBCC8CAF1}.Debug|Win32.Build.0 = Debug|Win32
+		{40FDF4B3-2C70-4213-819A-71ECBCC8CAF1}.Release|Win32.ActiveCfg = Release|Win32
+		{40FDF4B3-2C70-4213-819A-71ECBCC8CAF1}.Release|Win32.Build.0 = Release|Win32
+		{8EBC71B4-992B-48C3-BAE0-2B00EB9DE2EB}.Debug|Win32.ActiveCfg = Debug|Win32
+		{8EBC71B4-992B-48C3-BAE0-2B00EB9DE2EB}.Debug|Win32.Build.0 = Debug|Win32
+		{8EBC71B4-992B-48C3-BAE0-2B00EB9DE2EB}.Release|Win32.ActiveCfg = Release|Win32
+		{8EBC71B4-992B-48C3-BAE0-2B00EB9DE2EB}.Release|Win32.Build.0 = Release|Win32
+		{76BBAC3B-168E-4C52-9774-818730886537}.Debug|Win32.ActiveCfg = Debug|Win32
+		{76BBAC3B-168E-4C52-9774-818730886537}.Debug|Win32.Build.0 = Debug|Win32
+		{76BBAC3B-168E-4C52-9774-818730886537}.Release|Win32.ActiveCfg = Release|Win32
+		{76BBAC3B-168E-4C52-9774-818730886537}.Release|Win32.Build.0 = Release|Win32
+		{0129BDDD-C6EA-42B4-8941-C4D5281643D9}.Debug|Win32.ActiveCfg = Debug|Win32
+		{0129BDDD-C6EA-42B4-8941-C4D5281643D9}.Debug|Win32.Build.0 = Debug|Win32
+		{0129BDDD-C6EA-42B4-8941-C4D5281643D9}.Release|Win32.ActiveCfg = Release|Win32
+		{0129BDDD-C6EA-42B4-8941-C4D5281643D9}.Release|Win32.Build.0 = Release|Win32
+		{76B6EFEF-0C29-46C1-BEC8-9378847BBA86}.Debug|Win32.ActiveCfg = Debug|Win32
+		{76B6EFEF-0C29-46C1-BEC8-9378847BBA86}.Debug|Win32.Build.0 = Debug|Win32
+		{76B6EFEF-0C29-46C1-BEC8-9378847BBA86}.Release|Win32.ActiveCfg = Release|Win32
+		{76B6EFEF-0C29-46C1-BEC8-9378847BBA86}.Release|Win32.Build.0 = Release|Win32
+		{B1A0942D-9C49-4339-8CD8-A790D3AE573C}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B1A0942D-9C49-4339-8CD8-A790D3AE573C}.Debug|Win32.Build.0 = Debug|Win32
+		{B1A0942D-9C49-4339-8CD8-A790D3AE573C}.Release|Win32.ActiveCfg = Release|Win32
+		{B1A0942D-9C49-4339-8CD8-A790D3AE573C}.Release|Win32.Build.0 = Release|Win32
+		{ADA0E60B-5592-44E3-8822-B392368776CB}.Debug|Win32.ActiveCfg = Debug|Win32
+		{ADA0E60B-5592-44E3-8822-B392368776CB}.Debug|Win32.Build.0 = Debug|Win32
+		{ADA0E60B-5592-44E3-8822-B392368776CB}.Release|Win32.ActiveCfg = Release|Win32
+		{ADA0E60B-5592-44E3-8822-B392368776CB}.Release|Win32.Build.0 = Release|Win32
+		{ADDAC8DC-1E51-42DF-A81A-1775C7DBDF1D}.Debug|Win32.ActiveCfg = Debug|Win32
+		{ADDAC8DC-1E51-42DF-A81A-1775C7DBDF1D}.Debug|Win32.Build.0 = Debug|Win32
+		{ADDAC8DC-1E51-42DF-A81A-1775C7DBDF1D}.Release|Win32.ActiveCfg = Release|Win32
+		{ADDAC8DC-1E51-42DF-A81A-1775C7DBDF1D}.Release|Win32.Build.0 = Release|Win32
+		{45DA3528-D67B-4564-93C0-AE5682AFD5B8}.Debug|Win32.ActiveCfg = Debug|Win32
+		{45DA3528-D67B-4564-93C0-AE5682AFD5B8}.Debug|Win32.Build.0 = Debug|Win32
+		{45DA3528-D67B-4564-93C0-AE5682AFD5B8}.Release|Win32.ActiveCfg = Release|Win32
+		{45DA3528-D67B-4564-93C0-AE5682AFD5B8}.Release|Win32.Build.0 = Release|Win32
+		{1DB7CDAF-62A1-425D-BC66-B7F4600637DA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{1DB7CDAF-62A1-425D-BC66-B7F4600637DA}.Debug|Win32.Build.0 = Debug|Win32
+		{1DB7CDAF-62A1-425D-BC66-B7F4600637DA}.Release|Win32.ActiveCfg = Release|Win32
+		{1DB7CDAF-62A1-425D-BC66-B7F4600637DA}.Release|Win32.Build.0 = Release|Win32
+		{0CAE3F5A-F353-4C9F-BCFE-E63B9E05C046}.Debug|Win32.ActiveCfg = Debug|Win32
+		{0CAE3F5A-F353-4C9F-BCFE-E63B9E05C046}.Debug|Win32.Build.0 = Debug|Win32
+		{0CAE3F5A-F353-4C9F-BCFE-E63B9E05C046}.Release|Win32.ActiveCfg = Release|Win32
+		{0CAE3F5A-F353-4C9F-BCFE-E63B9E05C046}.Release|Win32.Build.0 = Release|Win32
+		{0403656D-FE78-46AE-B7CF-5A42D3B1DDBC}.Debug|Win32.ActiveCfg = Debug|Win32
+		{0403656D-FE78-46AE-B7CF-5A42D3B1DDBC}.Debug|Win32.Build.0 = Debug|Win32
+		{0403656D-FE78-46AE-B7CF-5A42D3B1DDBC}.Release|Win32.ActiveCfg = Release|Win32
+		{0403656D-FE78-46AE-B7CF-5A42D3B1DDBC}.Release|Win32.Build.0 = Release|Win32
+		{98FA4624-86A2-40D5-B225-0ED6B8B05ECA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{98FA4624-86A2-40D5-B225-0ED6B8B05ECA}.Debug|Win32.Build.0 = Debug|Win32
+		{98FA4624-86A2-40D5-B225-0ED6B8B05ECA}.Release|Win32.ActiveCfg = Release|Win32
+		{98FA4624-86A2-40D5-B225-0ED6B8B05ECA}.Release|Win32.Build.0 = Release|Win32
+		{EB6BFFFB-AFD9-4261-A18E-DA5B77C05045}.Debug|Win32.ActiveCfg = Debug|Win32
+		{EB6BFFFB-AFD9-4261-A18E-DA5B77C05045}.Debug|Win32.Build.0 = Debug|Win32
+		{EB6BFFFB-AFD9-4261-A18E-DA5B77C05045}.Release|Win32.ActiveCfg = Release|Win32
+		{EB6BFFFB-AFD9-4261-A18E-DA5B77C05045}.Release|Win32.Build.0 = Release|Win32
+		{328CE2CF-B2C7-4236-9BC7-304FEB8C7282}.Debug|Win32.ActiveCfg = Debug|Win32
+		{328CE2CF-B2C7-4236-9BC7-304FEB8C7282}.Debug|Win32.Build.0 = Debug|Win32
+		{328CE2CF-B2C7-4236-9BC7-304FEB8C7282}.Release|Win32.ActiveCfg = Release|Win32
+		{328CE2CF-B2C7-4236-9BC7-304FEB8C7282}.Release|Win32.Build.0 = Release|Win32
+		{F6E6F8C0-5A0B-45EE-B9E1-DABA41EA222B}.Debug|Win32.ActiveCfg = Debug|Win32
+		{F6E6F8C0-5A0B-45EE-B9E1-DABA41EA222B}.Debug|Win32.Build.0 = Debug|Win32
+		{F6E6F8C0-5A0B-45EE-B9E1-DABA41EA222B}.Release|Win32.ActiveCfg = Release|Win32
+		{F6E6F8C0-5A0B-45EE-B9E1-DABA41EA222B}.Release|Win32.Build.0 = Release|Win32
+		{262CF558-3BF6-4618-8DEE-1D0CB2B86221}.Debug|Win32.ActiveCfg = Debug|Win32
+		{262CF558-3BF6-4618-8DEE-1D0CB2B86221}.Debug|Win32.Build.0 = Debug|Win32
+		{262CF558-3BF6-4618-8DEE-1D0CB2B86221}.Release|Win32.ActiveCfg = Release|Win32
+		{262CF558-3BF6-4618-8DEE-1D0CB2B86221}.Release|Win32.Build.0 = Release|Win32
+		{389AFED9-BBC0-40DA-B404-02B97F12CE17}.Debug|Win32.ActiveCfg = Debug|Win32
+		{389AFED9-BBC0-40DA-B404-02B97F12CE17}.Debug|Win32.Build.0 = Debug|Win32
+		{389AFED9-BBC0-40DA-B404-02B97F12CE17}.Release|Win32.ActiveCfg = Release|Win32
+		{389AFED9-BBC0-40DA-B404-02B97F12CE17}.Release|Win32.Build.0 = Release|Win32
+		{6C336037-08B2-4AA3-A11B-5613753F036D}.Debug|Win32.ActiveCfg = Debug|Win32
+		{6C336037-08B2-4AA3-A11B-5613753F036D}.Debug|Win32.Build.0 = Debug|Win32
+		{6C336037-08B2-4AA3-A11B-5613753F036D}.Release|Win32.ActiveCfg = Release|Win32
+		{6C336037-08B2-4AA3-A11B-5613753F036D}.Release|Win32.Build.0 = Release|Win32
+		{49F868CF-15AA-418C-A63F-76DD6DED477E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{49F868CF-15AA-418C-A63F-76DD6DED477E}.Debug|Win32.Build.0 = Debug|Win32
+		{49F868CF-15AA-418C-A63F-76DD6DED477E}.Release|Win32.ActiveCfg = Release|Win32
+		{49F868CF-15AA-418C-A63F-76DD6DED477E}.Release|Win32.Build.0 = Release|Win32
+		{BA19E78D-4C03-4751-9538-42482BECFBD9}.Debug|Win32.ActiveCfg = Debug|Win32
+		{BA19E78D-4C03-4751-9538-42482BECFBD9}.Debug|Win32.Build.0 = Debug|Win32
+		{BA19E78D-4C03-4751-9538-42482BECFBD9}.Release|Win32.ActiveCfg = Release|Win32
+		{BA19E78D-4C03-4751-9538-42482BECFBD9}.Release|Win32.Build.0 = Release|Win32
+		{55786A73-E53B-4AAA-B59E-E44A972B23B6}.Debug|Win32.ActiveCfg = Debug|Win32
+		{55786A73-E53B-4AAA-B59E-E44A972B23B6}.Debug|Win32.Build.0 = Debug|Win32
+		{55786A73-E53B-4AAA-B59E-E44A972B23B6}.Release|Win32.ActiveCfg = Release|Win32
+		{55786A73-E53B-4AAA-B59E-E44A972B23B6}.Release|Win32.Build.0 = Release|Win32
+		{EC735A75-FB7A-42A5-BB8F-2656EECC3239}.Debug|Win32.ActiveCfg = Debug|Win32
+		{EC735A75-FB7A-42A5-BB8F-2656EECC3239}.Debug|Win32.Build.0 = Debug|Win32
+		{EC735A75-FB7A-42A5-BB8F-2656EECC3239}.Release|Win32.ActiveCfg = Release|Win32
+		{EC735A75-FB7A-42A5-BB8F-2656EECC3239}.Release|Win32.Build.0 = Release|Win32
+		{C0B217EF-184F-4130-9379-0E2EC23830BA}.Debug|Win32.ActiveCfg = Debug|Win32
+		{C0B217EF-184F-4130-9379-0E2EC23830BA}.Debug|Win32.Build.0 = Debug|Win32
+		{C0B217EF-184F-4130-9379-0E2EC23830BA}.Release|Win32.ActiveCfg = Release|Win32
+		{C0B217EF-184F-4130-9379-0E2EC23830BA}.Release|Win32.Build.0 = Release|Win32
+		{DE24F3F4-A5CB-43DE-9187-6F1846CB5A15}.Debug|Win32.ActiveCfg = Debug|Win32
+		{DE24F3F4-A5CB-43DE-9187-6F1846CB5A15}.Debug|Win32.Build.0 = Debug|Win32
+		{DE24F3F4-A5CB-43DE-9187-6F1846CB5A15}.Release|Win32.ActiveCfg = Release|Win32
+		{DE24F3F4-A5CB-43DE-9187-6F1846CB5A15}.Release|Win32.Build.0 = Release|Win32
+		{D5EF8211-999C-4FB5-9218-DDCFD51D0611}.Debug|Win32.ActiveCfg = Debug|Win32
+		{D5EF8211-999C-4FB5-9218-DDCFD51D0611}.Debug|Win32.Build.0 = Debug|Win32
+		{D5EF8211-999C-4FB5-9218-DDCFD51D0611}.Release|Win32.ActiveCfg = Release|Win32
+		{D5EF8211-999C-4FB5-9218-DDCFD51D0611}.Release|Win32.Build.0 = Release|Win32
+		{45456E09-7986-4697-ACEE-A717148636B1}.Debug|Win32.ActiveCfg = Debug|Win32
+		{45456E09-7986-4697-ACEE-A717148636B1}.Debug|Win32.Build.0 = Debug|Win32
+		{45456E09-7986-4697-ACEE-A717148636B1}.Release|Win32.ActiveCfg = Release|Win32
+		{45456E09-7986-4697-ACEE-A717148636B1}.Release|Win32.Build.0 = Release|Win32
+		{F6652EA0-E9D5-4BBF-A31E-650F79163D0B}.Debug|Win32.ActiveCfg = Debug|Win32
+		{F6652EA0-E9D5-4BBF-A31E-650F79163D0B}.Debug|Win32.Build.0 = Debug|Win32
+		{F6652EA0-E9D5-4BBF-A31E-650F79163D0B}.Release|Win32.ActiveCfg = Release|Win32
+		{F6652EA0-E9D5-4BBF-A31E-650F79163D0B}.Release|Win32.Build.0 = Release|Win32
+		{FE0F6ED2-5880-4FB8-9C62-917BE97712D5}.Debug|Win32.ActiveCfg = Debug|Win32
+		{FE0F6ED2-5880-4FB8-9C62-917BE97712D5}.Debug|Win32.Build.0 = Debug|Win32
+		{FE0F6ED2-5880-4FB8-9C62-917BE97712D5}.Release|Win32.ActiveCfg = Release|Win32
+		{FE0F6ED2-5880-4FB8-9C62-917BE97712D5}.Release|Win32.Build.0 = Release|Win32
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+	GlobalSection(NestedProjects) = preSolution
+		{B5E41AA2-E7EB-46B5-B647-7444B4C93B06} = {2DB68E23-7E57-4452-ADC2-D04797A03ED2}
+		{26DD31E0-875A-44E7-9337-16691F60FC88} = {DCC674BF-DBE1-4698-876C-C6D4A268FBEF}
+		{4870CCF9-A246-4981-B22B-A59FE65EC087} = {02B7DD4B-4770-4C31-968F-6FC9778782DC}
+		{F7369390-5BAB-418C-823F-09E99AED521D} = {02B7DD4B-4770-4C31-968F-6FC9778782DC}
+		{F2178333-ED41-45CE-BC08-122362330563} = {02B7DD4B-4770-4C31-968F-6FC9778782DC}
+		{B273E98C-CCA4-49C4-A194-9EE529B800FF} = {02B7DD4B-4770-4C31-968F-6FC9778782DC}
+		{9D561956-7962-45B7-9DFE-E3A114534CC7} = {4870CCF9-A246-4981-B22B-A59FE65EC087}
+		{84DED881-0E5C-4218-B981-4F9D2E9448CA} = {4870CCF9-A246-4981-B22B-A59FE65EC087}
+		{42A0BA98-B199-4CA0-AA59-6EDFF376E193} = {4870CCF9-A246-4981-B22B-A59FE65EC087}
+		{5504E4BC-AA75-45F8-A8B4-060CE1B2E3AE} = {4870CCF9-A246-4981-B22B-A59FE65EC087}
+		{40FDF4B3-2C70-4213-819A-71ECBCC8CAF1} = {4870CCF9-A246-4981-B22B-A59FE65EC087}
+		{8EBC71B4-992B-48C3-BAE0-2B00EB9DE2EB} = {4870CCF9-A246-4981-B22B-A59FE65EC087}
+		{76BBAC3B-168E-4C52-9774-818730886537} = {4870CCF9-A246-4981-B22B-A59FE65EC087}
+		{0129BDDD-C6EA-42B4-8941-C4D5281643D9} = {4870CCF9-A246-4981-B22B-A59FE65EC087}
+		{76B6EFEF-0C29-46C1-BEC8-9378847BBA86} = {4870CCF9-A246-4981-B22B-A59FE65EC087}
+		{B1A0942D-9C49-4339-8CD8-A790D3AE573C} = {F7369390-5BAB-418C-823F-09E99AED521D}
+		{ADA0E60B-5592-44E3-8822-B392368776CB} = {F7369390-5BAB-418C-823F-09E99AED521D}
+		{ADDAC8DC-1E51-42DF-A81A-1775C7DBDF1D} = {F7369390-5BAB-418C-823F-09E99AED521D}
+		{45DA3528-D67B-4564-93C0-AE5682AFD5B8} = {F7369390-5BAB-418C-823F-09E99AED521D}
+		{1DB7CDAF-62A1-425D-BC66-B7F4600637DA} = {F7369390-5BAB-418C-823F-09E99AED521D}
+		{0CAE3F5A-F353-4C9F-BCFE-E63B9E05C046} = {F7369390-5BAB-418C-823F-09E99AED521D}
+		{0403656D-FE78-46AE-B7CF-5A42D3B1DDBC} = {F7369390-5BAB-418C-823F-09E99AED521D}
+		{98FA4624-86A2-40D5-B225-0ED6B8B05ECA} = {F7369390-5BAB-418C-823F-09E99AED521D}
+		{EB6BFFFB-AFD9-4261-A18E-DA5B77C05045} = {F7369390-5BAB-418C-823F-09E99AED521D}
+		{328CE2CF-B2C7-4236-9BC7-304FEB8C7282} = {F2178333-ED41-45CE-BC08-122362330563}
+		{45456E09-7986-4697-ACEE-A717148636B1} = {F2178333-ED41-45CE-BC08-122362330563}
+		{F6E6F8C0-5A0B-45EE-B9E1-DABA41EA222B} = {B273E98C-CCA4-49C4-A194-9EE529B800FF}
+		{262CF558-3BF6-4618-8DEE-1D0CB2B86221} = {B273E98C-CCA4-49C4-A194-9EE529B800FF}
+		{389AFED9-BBC0-40DA-B404-02B97F12CE17} = {B273E98C-CCA4-49C4-A194-9EE529B800FF}
+		{6C336037-08B2-4AA3-A11B-5613753F036D} = {B273E98C-CCA4-49C4-A194-9EE529B800FF}
+		{49F868CF-15AA-418C-A63F-76DD6DED477E} = {B273E98C-CCA4-49C4-A194-9EE529B800FF}
+		{BA19E78D-4C03-4751-9538-42482BECFBD9} = {B273E98C-CCA4-49C4-A194-9EE529B800FF}
+		{55786A73-E53B-4AAA-B59E-E44A972B23B6} = {B273E98C-CCA4-49C4-A194-9EE529B800FF}
+		{EC735A75-FB7A-42A5-BB8F-2656EECC3239} = {B273E98C-CCA4-49C4-A194-9EE529B800FF}
+		{C0B217EF-184F-4130-9379-0E2EC23830BA} = {B273E98C-CCA4-49C4-A194-9EE529B800FF}
+		{DE24F3F4-A5CB-43DE-9187-6F1846CB5A15} = {B5E41AA2-E7EB-46B5-B647-7444B4C93B06}
+		{D5EF8211-999C-4FB5-9218-DDCFD51D0611} = {B5E41AA2-E7EB-46B5-B647-7444B4C93B06}
+		{FE0F6ED2-5880-4FB8-9C62-917BE97712D5} = {B5E41AA2-E7EB-46B5-B647-7444B4C93B06}
+	EndGlobalSection
+EndGlobal

Added: incubator/etch/trunk/binding-c/runtime/c/project/etch/etch.vcproj
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-c/runtime/c/project/etch/etch.vcproj?rev=767594&view=auto
==============================================================================
--- incubator/etch/trunk/binding-c/runtime/c/project/etch/etch.vcproj (added)
+++ incubator/etch/trunk/binding-c/runtime/c/project/etch/etch.vcproj Wed Apr 22 17:25:43 2009
@@ -0,0 +1,739 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+	ProjectType="Visual C++"
+	Version="8.00"
+	Name="etch"
+	ProjectGUID="{858504A1-BA1B-47B1-834A-4993B633F9A4}"
+	RootNamespace="etch"
+	Keyword="Win32Proj"
+	>
+	<Platforms>
+		<Platform
+			Name="Win32"
+		/>
+	</Platforms>
+	<ToolFiles>
+	</ToolFiles>
+	<Configurations>
+		<Configuration
+			Name="Debug|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				Optimization="0"
+				AdditionalIncludeDirectories="..\..\inc;..\..\ext\hashtab;&quot;$(APRPATH)\inc&quot;;"
+				PreprocessorDefinitions="WIN32;_DEBUG;_LIB;APR_DECLARE_STATIC"
+				MinimalRebuild="false"
+				ExceptionHandling="0"
+				BasicRuntimeChecks="3"
+				RuntimeLibrary="3"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				WarnAsError="true"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="1"
+				CompileAs="1"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+				OutputFile="..\..\lib\$(ProjectName).lib"
+				AdditionalLibraryDirectories=""
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+		<Configuration
+			Name="Release|Win32"
+			OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+			IntermediateDirectory="$(ConfigurationName)"
+			ConfigurationType="4"
+			CharacterSet="1"
+			WholeProgramOptimization="1"
+			>
+			<Tool
+				Name="VCPreBuildEventTool"
+			/>
+			<Tool
+				Name="VCCustomBuildTool"
+			/>
+			<Tool
+				Name="VCXMLDataGeneratorTool"
+			/>
+			<Tool
+				Name="VCWebServiceProxyGeneratorTool"
+			/>
+			<Tool
+				Name="VCMIDLTool"
+			/>
+			<Tool
+				Name="VCCLCompilerTool"
+				PreprocessorDefinitions="WIN32;NDEBUG;_LIB"
+				RuntimeLibrary="2"
+				UsePrecompiledHeader="0"
+				WarningLevel="3"
+				Detect64BitPortabilityProblems="true"
+				DebugInformationFormat="3"
+			/>
+			<Tool
+				Name="VCManagedResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCResourceCompilerTool"
+			/>
+			<Tool
+				Name="VCPreLinkEventTool"
+			/>
+			<Tool
+				Name="VCLibrarianTool"
+			/>
+			<Tool
+				Name="VCALinkTool"
+			/>
+			<Tool
+				Name="VCXDCMakeTool"
+			/>
+			<Tool
+				Name="VCBscMakeTool"
+			/>
+			<Tool
+				Name="VCFxCopTool"
+			/>
+			<Tool
+				Name="VCPostBuildEventTool"
+			/>
+		</Configuration>
+	</Configurations>
+	<References>
+	</References>
+	<Files>
+		<Filter
+			Name="Source Files"
+			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+			>
+			<Filter
+				Name="common"
+				>
+				<File
+					RelativePath="..\..\src\common\etch_apr.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etch_arraylist.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\bindings\msg\etch_arrayval.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etch_collection.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etch_config.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etch_encoding.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etch_global.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etch_linklist.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etch_natarray.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_syncobj.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_url.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etchexcp.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etchflexbuf.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etchhash.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etchhashfunc.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etchlog.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etchmap.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etchmem.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etchobj.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etchrun.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\common\etchutl.c"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="message"
+				>
+				<File
+					RelativePath="..\..\src\bindings\msg\etch_field.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\bindings\msg\etch_id_name.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\bindings\msg\etch_message.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\bindings\msg\etch_structval.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\bindings\msg\etch_tagdata.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\bindings\msg\etch_type.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\bindings\msg\etch_validator.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\bindings\msg\etch_valufact.c"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="transport"
+				>
+				<File
+					RelativePath="..\..\src\bindings\msg\etch_binary_tdi.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\bindings\msg\etch_binary_tdo.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_connection.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_conxevent.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\support\etch_mailboxint.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_mailboxmgr.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_messagizer.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_packetizer.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_plainmailbox.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_plainmboxmgr.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_sessiondata.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\support\etch_sessionint.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_sessionlisten.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_sessionmsg.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_sessionpkt.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\support\etch_simpletimer.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\support\etch_sourceint.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\bindings\msg\etch_tagdata_inp.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\bindings\msg\etch_tagdata_out.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_tcpconxn.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_tcpserver.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_tdformat.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_transport.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_transportdata.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\support\etch_transportint.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_transportmsg.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_transportpkt.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etchmutex.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etchthread.c"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="support"
+				>
+				<File
+					RelativePath="..\..\src\bindings\msg\etch_defvalufact.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\transport\etch_queue.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\support\etch_queue_apr.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\support\etch_remote.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\bindings\support\etch_resources.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\support\etch_serializer.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\support\etch_stub.c"
+					>
+				</File>
+				<File
+					RelativePath="..\..\src\support\etch_threadpool_apr.c"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Header Files"
+			Filter="h;hpp;hxx;hm;inl;inc;xsd"
+			UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
+			>
+			<Filter
+				Name="common"
+				>
+				<File
+					RelativePath="..\..\inc\etch.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_apr.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_arraylist.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_arrayval.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_collection.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_config.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_encoding.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_global.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_linklist.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_svcobj_masks.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_syncobj.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_url.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etchdefs.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etchexcp.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etchflexbuf.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etchhash.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etchlog.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etchmap.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etchmem.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etchobj.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etchobjtypes.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etchrun.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etchutl.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etchwarn.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="message"
+				>
+				<File
+					RelativePath="..\..\inc\etch_field.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_id_name.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_message.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_structval.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_tagdata.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_type.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_validator.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_valufact.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etchmsgutl.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="transport"
+				>
+				<File
+					RelativePath="..\..\inc\etch_binary_tdi.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_binary_tdo.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_connection.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_mailboxint.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_mailboxmgr.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_messagizer.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_packetizer.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_plainmailbox.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_plainmboxmgr.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_sessiondata.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_sessionint.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_sessionlisten.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_sessionmsg.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_sessionpkt.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_simpletimer.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_sourceint.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_tagdata_inp.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_tagdata_out.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_tcpconxn.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_tcpserver.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_tdformat.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_transport.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_transportdata.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_transportint.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_transportmsg.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_transportpkt.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etchmutex.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etchthread.h"
+					>
+				</File>
+			</Filter>
+			<Filter
+				Name="support"
+				>
+				<File
+					RelativePath="..\..\inc\etch_defvalufact.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_queue.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_queue_apr.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_remote.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_resources.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_serializer.h"
+					>
+				</File>
+				<File
+					RelativePath="..\..\inc\etch_stub.h"
+					>
+				</File>
+			</Filter>
+		</Filter>
+		<Filter
+			Name="Resource Files"
+			Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
+			UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
+			>
+		</Filter>
+	</Files>
+	<Globals>
+	</Globals>
+</VisualStudioProject>

Added: incubator/etch/trunk/binding-c/runtime/c/project/notes/accepted.txt
URL: http://svn.apache.org/viewvc/incubator/etch/trunk/binding-c/runtime/c/project/notes/accepted.txt?rev=767594&view=auto
==============================================================================
--- incubator/etch/trunk/binding-c/runtime/c/project/notes/accepted.txt (added)
+++ incubator/etch/trunk/binding-c/runtime/c/project/notes/accepted.txt Wed Apr 22 17:25:43 2009
@@ -0,0 +1,121 @@
+  =====================================================
+  c accepted
+  =====================================================
+
+tcpxfact_session_accepted (i_sessionlistener* thisx, etch_socket* socket)
+
+  ETCH_RESXKEY_SOCKET
+  delivery_service = new_etch_transport_a (url, resources);
+  
+  params->server_stub = HELPER.new_helper_accepted_server (etch_server_factory* p)
+
+      perf_remote_client* client = new_remote_client (0, ds, vf);
+        
+      i_perf_server* iserver = p->main_new_server (p);
+          perf_remote_client* client  = (perf_remote_client*) p->client;
+          perf_server_impl* newserver = new_perf_server_impl (client);
+          return newserver->perf_server_base;
+        
+      perf_server_stub* stub = new_perf_server_stub (p); 
+        
+          stub->destroy   = destroy_stub_object;    /* private */
+          stub->destroyex = destroy_my_server_stub; /* public */
+            
+          stub->stub_base = new_stub (implobj, stubtype, ids, qp, fp);
+             stubbase->ds->mbm->set_session (ds, stubbase->isessionmsg);   
+             stubbase->impl_callbacks = etchstub_get_session_callbacks_from (implobj); 
+            
+          stub->stub_base->stubobj = (objmask*) newstub;
+          stub->stub_base->params  = params;
+          set stub helper run procedures for each message type.
+            
+  // delivery.itm is mailbox manager. its transport_control was overriden to 
+  // tcpdelsvc_transport_control in tcpdelsvc_init().
+  // this in turn calls tcpds->transport->transport_control() 
+  // delivery.transport is the mailbox manager. 
+  
+  delivery_service->itm->transport_control (CONTROL_START);  
+  
+  
+  =====================================================
+  java accepted
+  =====================================================
+  
+  TcpListener.onSessionAccepted(socket)
+   
+     resources.add(socket);        
+     DeliveryService = newTransport();
+     
+     
+		new TcpConnection();
+		    TcpConnection implements TransportData
+		           send(buffer);
+		           C-NOTE: OK, etch_tcp_connection.its is i_transportdata, etch_tcpconx_transport_data does the send()
+		           C-QUESTION: etch_tcp_connection.transport_control etc. where are they assigned? should they be same as itd?
+		        implements Transport 
+		           TransportQuery(START, STOP, etc),
+		           TransportControl (START, STOP, etc)
+		    TcpConnection HOSTS SessionData as session.    
+		        NOTE: SessionData (including sessionData()), is null until set by inheritor (Packetizer).
+		        this.session.sessionData(buffer) is invoked by this.fireData(buffer);
+		
+		new Packetizer(TcpConnection(transport));
+		   (NOTE: Packetizer.transport IS-A TransportData, but Packetizer IMPLEMENTS TransportPacket);
+		   
+		    this.transport = TcpConnection.TransportData;  
+		        C-NOTE: HERE'S HOW:
+		            C-NOTE: TcpConnection's TransportData interface is passed to Packetizer's ctor
+		            C-NOTE THIS AND ALL SUBSEQUENT: it is only necessary to replace each method if we do not destroy
+		                and replace the transport object. otherwise we would destroy existing transport object, 
+		                and simply replace that with the transport object passed in the ctor.
+		            Packetizer.transport.transportData    = TcpConnection.TransportData;    
+                    Packetizer.transport.transportControl = TcpConnection.transportControl; ETC. ETC. query and notify
+                    Packetizer.transportPacket has new logic, and then calls Packetizer.transport.transportData().
+                    Packetizer.transportControl, Notify, and Query, call Packetizer.transport.transportControl, Query, Notify.
+                    		            
+		    Tcpconnection.setSession(this);
+		        C-NOTE: HERE'S HOW: TcpConnection HOSTS SessionData
+		        TcpConnection.sessionData    = Packetizer.sessionData;    C-NOTE: does tcpconx even have a session_data()?
+		        TcpConnection.sessionControl = Packetizer.sessionControl; ETC. ETC. query and notify
+		
+		
+		new Messagizer(Packetizer(TransportPacket));
+		   (NOTE: Messagizer.transport IS-A TransportPacket, but Messagizer IMPLEMENTS TransportMessage);
+	    
+		    this.transport = Packetizer.TransportPacket
+		        C-NOTE: HERE'S HOW:
+		            C-NOTE: Packetizer's TransportPacket interface is passed to Messagizer's ctor
+		            Messagizer.transport.transportPacket  = Packetizer.transportPacket;  
+		            Messagizer.transport.transportControl = Packetizer.transportControl; ETC. ETC.
+		    
+		    Packetizer.setSession(this);
+		        C-NOTE: HERE'S HOW: Packetizer IMPLEMENTS SessionData  but HOSTS SessionPacket. Messagizer IMPLEMENTS SessionPacket
+		        Packetizer.session.sessionPacket  = Messagizer.sessionPacket;
+		        Packetizer.session.sessionControl = Messagizer.sessionControl; ETC. ETC.
+			
+			
+		new PlainMailboxManager(Messagizer(transport));	
+		    (NOTE: MailboxManager.transport IS-A TransportMessage, AND MailboxManager EXTENDS TransportMessage);
+		    
+            this.transport = Messagizer.TransportMessage;
+            C-NOTE: HERE'S HOW: C-NOTE: Messagizer's i_transportmessage is passed in MailboxManager ctor
+            MailboxManager.transport.TransportMessage = Messagizer.TransportMessage
+            MailboxManager.transport.TransportControl = Messagizer.TransportControl; ETC. ETC.
+            
+		    Messagizer.setSession(this);
+                C-NOTE: HERE'S HOW: Messagizer IMPLEMENTS SessionPacket  but HOSTS SessionMessage. MailboxManager EXTENDS SessionMessage
+			    Messagizer.session.sessionMessage = MailboxManager.sessionMessage;
+			    Messagizer.session.sessionControl = MailboxManager.sessionControl; ETC. ETC.
+			
+			
+		new DefaultDeliveryService(MailboxManager(transport));
+		    NOTE: DeliveryService transport IS-A MBM IS-A TransportMessage, AND DeliveryService EXTENDS TransportMessage
+		
+            this.transport = MailboxManager ;
+                C-NOTE: HERE'S HOW:
+                delsvc->transport = mboxmgr->imanager; OR: THE FOLLOWING
+                delsvc->transport->transportMessage = mboxmgr->transportMessage; ETC ETC ETC
+                
+		    MailboxManager.setSession(this);
+                C-NOTE: HERE'S HOW: MailboxManager EXTENDS SessionMessage  AND HOSTS SessionMessage. DeliveryService EXTENDS SessionMessage
+                MailboxManager.session.sessionMessage = delsvc->sessionMessage; ETC ETC ETC
\ No newline at end of file