diff -r 3406c99bc375 -r 07b41fa8d1dd hti/HtiServicePlugins/HtiIpProxyServicePlugin/src/HtiIpProxyServicePlugin.cpp --- a/hti/HtiServicePlugins/HtiIpProxyServicePlugin/src/HtiIpProxyServicePlugin.cpp Thu Jul 15 20:25:38 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,363 +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 "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: HtiIpProxyServicePlugin implementation -* -*/ - - -// INCLUDE FILES -#include "HtiIpProxyServicePlugin.h" -#include -#include -#include -#include -#include "MSocketObserver.h" -#include "Mhostconnectionobserver.h" -#include "CIPProxyEngine.h" - -// CONSTANTS -const static TUid KIpProxyServiceUid = { 0x10210CD3 }; - -// MACROS - -// LOCAL CONSTANTS AND MACROS - -// MODULE DATA STRUCTURES - -// LOCAL FUNCTION PROTOTYPES - -// FORWARD DECLARATIONS - -// ============================ MEMBER FUNCTIONS =============================== - -// Create instance of concrete ECOM interface implementation -CHtiIpProxyServicePlugin* CHtiIpProxyServicePlugin::NewL() - { - CHtiIpProxyServicePlugin* self = new( ELeave ) CHtiIpProxyServicePlugin; - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop(); - return self; - } - -// Constructor -CHtiIpProxyServicePlugin::CHtiIpProxyServicePlugin() : - iSocketObserver( NULL ), - iHostObserver( NULL ), - iProxyEngine( NULL ), - iOutgoingArray( NULL ), - iBusy( EFalse ), - iConnected( EFalse ) - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin" ); - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin" ); - } - -CHtiIpProxyServicePlugin::~CHtiIpProxyServicePlugin() - { - HTI_LOG_FUNC_IN( "~CHtiIpProxyServicePlugin" ); - - if ( iProxyEngine ) - { - iProxyEngine->StopListening(); - } - delete iProxyEngine; - delete iOutgoingArray; - - HTI_LOG_FUNC_OUT( "~CHtiIpProxyServicePlugin" ); - } - -// Second phase construction. -void CHtiIpProxyServicePlugin::ConstructL() - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::ConstructL" ); - - iOutgoingArray = new( ELeave ) CDesC8ArraySeg( 10 ); - iProxyEngine = CIPProxyEngine::NewL( this ); - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::ConstructL" ); - } - - -void CHtiIpProxyServicePlugin::InitL() - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::InitL" ); - - if ( iProxyEngine ) - { - iProxyEngine->StartListening(); - } - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::InitL" ); - } - -TBool CHtiIpProxyServicePlugin::IsBusy() - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::IsBusy" ); - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::IsBusy" ); - return iBusy; - } - -void CHtiIpProxyServicePlugin::ProcessMessageL( const TDesC8& aMessage, - THtiMessagePriority /* aPriority */ ) - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::ProcessMessageL" ); - - iBusy = ETrue; - - __ASSERT_ALWAYS( iSocketObserver, User::Panic( _L ( "IP-Proxy ECom-plugin" ), KErrBadHandle ) ); - iSocketObserver->DataReceivedL( this, aMessage ); - - iBusy = EFalse; - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::ProcessMessageL" ); - } - -void CHtiIpProxyServicePlugin::NotifyMemoryChange( TInt aAvailableMemory ) - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::NotifyMemoryChange" ); - - iBusy = ETrue; - - TInt count = iOutgoingArray->Count(); - if ( !count ) - { - // No outgoing data - return; - } - - // Calculate needed outgoing buffer size - TInt i = 0; - TInt neededSize = 0; - for ( ; i < count; ++i ) - { - TInt size = ( *iOutgoingArray )[i].Size(); - if ( neededSize + size <= aAvailableMemory ) - { - neededSize += size; - } - } - - if ( !neededSize ) - { - // Not enough memory - return; - } - - // Create an outgoing buffer and join as many buffers as possible - HBufC8* message = HBufC8::New( neededSize ); - if ( !message ) - { - // Not enough memory - return; - } - - TPtr8 messagePtr( message->Des() ); - for ( TInt j = 0; j < i; ++j ) - { - messagePtr.Append( ( *iOutgoingArray )[j] ); - } - - // Dispatch message to HTI-Framework which takes the ownership of message - TInt err = iDispatcher->DispatchOutgoingMessage( message, KIpProxyServiceUid ); - if ( err == KErrNone ) - { - message = NULL; - iOutgoingArray->Delete( 0, i ); - iDispatcher->RemoveMemoryObserver( this ); - } - else if ( err != KErrNoMemory ) - { - delete message; - iDispatcher->RemoveMemoryObserver( this ); - - __ASSERT_ALWAYS( iHostObserver, User::Panic( _L ( "IP-Proxy ECom-plugin" ), KErrBadHandle ) ); - TRAP( err, iHostObserver->HostConnectionErrorL( err ) ); - } - - iBusy = EFalse; - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::NotifyMemoryChange" ); - } - -MSocket* CHtiIpProxyServicePlugin::GetSocket() - { - return this; - } - -MHostConnection* CHtiIpProxyServicePlugin::GetHostConnection() - { - return this; - } - -RSocket* CHtiIpProxyServicePlugin::GetRSocket() - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::GetRSocket" ); - - RSocket* KSocket = NULL; - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::GetRSocket" ); - return KSocket; - } - -TUint CHtiIpProxyServicePlugin::LocalPort() const - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::LocalPort" ); - - const TUint KLocalPort = 0; - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::LocalPort" ); - return KLocalPort; - } - -TUint CHtiIpProxyServicePlugin::RemotePort() const - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::RemotePort" ); - - const TUint KRemotePort = 0; - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::RemotePort" ); - return KRemotePort; - } - -void CHtiIpProxyServicePlugin::SetObserver( MSocketObserver* aObserver ) - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::SetObserver" ); - - iSocketObserver = aObserver; - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::SetObserver" ); - } - -void CHtiIpProxyServicePlugin::SetSocketOwnershipMode( TBool /* aHasOwnership */ ) - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::SetSocketOwnershipMode" ); - - /* Empty implementation */ - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::SetSocketOwnershipMode" ); - } - -void CHtiIpProxyServicePlugin::IssueRead() - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::IssueRead" ); - - /* Empty implementation */ - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::IssueRead" ); - } - -void CHtiIpProxyServicePlugin::Cancel() - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::Cancel" ); - - /* Empty implementation */ - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::Cancel" ); - } - -void CHtiIpProxyServicePlugin::SocketInfo( TProtocolDesc& aDesc ) const - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::SocketInfo" ); - - aDesc.iProtocol = KProtocolInetTcp; - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::SocketInfo" ); - } - -TBool CHtiIpProxyServicePlugin::IsUDP() const - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::IsUDP" ); - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::IsUDP" ); - return EFalse; - } - -void CHtiIpProxyServicePlugin::WriteL( const TDesC8& aData ) - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::WriteL" ); - - iBusy = ETrue; - - // Dispatcher takes ownership of the message if no error has occured - HBufC8* message = aData.AllocL(); - TInt err = iDispatcher->DispatchOutgoingMessage( message, KIpProxyServiceUid ); - if ( err != KErrNone && err != KErrNoMemory ) - { - // Some error occured while dispatching the message - delete message; - __ASSERT_ALWAYS( iHostObserver, User::Panic( _L ( "IP-Proxy ECom-plugin" ), KErrBadHandle ) ); - iHostObserver->HostConnectionErrorL( err ); - } - else if ( err == KErrNoMemory ) - { - // No memory was available so add message to queue - delete message; - iOutgoingArray->AppendL( aData.Mid( 0 ) ); - iDispatcher->AddMemoryObserver( this ); - } - - iBusy = EFalse; - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::WriteL" ); - } - -void CHtiIpProxyServicePlugin::IssueConnectL() - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::IssueConnectL" ); - - iConnected = ETrue; - - __ASSERT_ALWAYS( iHostObserver, User::Panic( _L ( "IP-Proxy ECom-plugin" ), KErrBadHandle ) ); - iHostObserver->ConnectionEstablishedL(); - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::IssueConnectL" ); - } - -void CHtiIpProxyServicePlugin::IssueDisconnect() - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::IssueDisconnect" ); - - __ASSERT_ALWAYS( iSocketObserver, User::Panic( _L ( "IP-Proxy ECom-plugin" ), KErrBadHandle ) ); - TRAP_IGNORE( iSocketObserver->DisconnectedL( this ) ); - - iConnected = EFalse; - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::IssueDisconnect" ); - } - -void CHtiIpProxyServicePlugin::SetObserver( MHostConnectionObserver* aObserver ) - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::SetObserver 2" ); - - iHostObserver = aObserver; - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::SetObserver 2" ); - } - -TBool CHtiIpProxyServicePlugin::IsConnected() - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::IsConnected" ); - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::IsConnected" ); - return iConnected; - } - -RSocket* CHtiIpProxyServicePlugin::Socket() - { - HTI_LOG_FUNC_IN( "CHtiIpProxyServicePlugin::Socket" ); - - RSocket* KSocket = NULL; - - HTI_LOG_FUNC_OUT( "CHtiIpProxyServicePlugin::Socket" ); - return KSocket; - }