hti/HtiServicePlugins/HtiIpProxyServicePlugin/IPProxyEngine/Src/Csocketrouter.cpp
branchRCL_3
changeset 4 73ff0d268e1d
parent 0 a03f92240627
--- a/hti/HtiServicePlugins/HtiIpProxyServicePlugin/IPProxyEngine/Src/Csocketrouter.cpp	Tue Feb 02 10:12:29 2010 +0200
+++ b/hti/HtiServicePlugins/HtiIpProxyServicePlugin/IPProxyEngine/Src/Csocketrouter.cpp	Sat Feb 20 00:22:34 2010 +0200
@@ -18,7 +18,7 @@
 
 
 // INCLUDE FILES
-#include "CSocketRouter.h"
+#include "Csocketrouter.h"
 #include "CommRouterDefinitions.h"
 #include "MSocketRouterObserver.h"
 #include "MBPProtocol.h"
@@ -215,13 +215,14 @@
 // CSocketRouter::FindPeerSocket
 // -----------------------------------------------------------------------------
 //
-TInt CSocketRouter::FindPeerSocket( TUint aRemotePort )
+TInt CSocketRouter::FindPeerSocket( TUint aPort )
     {
     DEBUG_PRINT( DEBUG_STRING( "CSocketRouter::FindPeerSocket()" ) );
     TInt count = iPeerSocketArray->Count();
     for ( TInt i = 0; i < count; i++ )
         {
-        if ( iPeerSocketArray->At( i )->RemotePort() == aRemotePort )
+        if ( iPeerSocketArray->At( i )->RemotePort() == aPort 
+                || iPeerSocketArray->At( i )->LocalPort() == aPort)
             {
             return i;
             }
@@ -648,17 +649,24 @@
 // CSocketRouter::CloseTCPConnection
 // -----------------------------------------------------------------------------
 //
-void CSocketRouter::CloseTCPConnection( TUint aPort )
+void CSocketRouter::CloseTCPConnectionL( TUint aPort )
     {
     DEBUG_PRINT( DEBUG_STRING( "CloseTCPConnection, port = %d" ), aPort );
+    
     // Close the socket if it exists
+    CArrayPtr<CSocket>* socketArrayForDestroy = new (ELeave) CArrayPtrFlat<CSocket> ( 10 );
+    CleanupStack::PushL(socketArrayForDestroy);
     TInt index = FindPeerSocket( aPort );
-    if ( index > -1 )
+    while ( index > -1 )
         {
-        RemovePeerSocket( index );
+        socketArrayForDestroy->AppendL(iPeerSocketArray->At( index ));
+        iPeerSocketArray->Delete(index);
+        index = FindPeerSocket( aPort );
         }
+    socketArrayForDestroy->ResetAndDestroy();
+    CleanupStack::PopAndDestroy(socketArrayForDestroy);
 
-    if ( iObserver && index > -1 )
+    if ( iObserver )
         {
         iObserver->CloseTCPConnection( aPort );
         }