diff -r 28c1bd28d474 -r 73ff0d268e1d hti/HtiServicePlugins/HtiIpProxyServicePlugin/IPProxyEngine/Src/Csocketrouter.cpp --- 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* socketArrayForDestroy = new (ELeave) CArrayPtrFlat ( 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 ); }