diff -r 0aa8cc770c8a -r 4a793f564d72 localconnectivityservice/dun/utils/src/DunNetDataport.cpp --- a/localconnectivityservice/dun/utils/src/DunNetDataport.cpp Tue Aug 31 16:03:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,395 +0,0 @@ -/* -* Copyright (c) 2006-2008 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: Dataport specific network resource accessor implementation -* -*/ - - -#include -#include "DunNetDataport.h" -#include "DunUtils.h" -#include "DunDebug.h" - -_LIT(DUN_GGP_DATAPORT_CSY_PORT, "::DUN"); -_LIT(DUN_GGP_DATAPORT_CSY, "DATAPORT"); - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// Two-phased constructor. -// --------------------------------------------------------------------------- -// -CDunNetDataport* CDunNetDataport::NewL( TInt aNumOfMaxChannels ) - { - CDunNetDataport* self = new (ELeave) CDunNetDataport( aNumOfMaxChannels ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// Destructor. -// --------------------------------------------------------------------------- -// -CDunNetDataport::~CDunNetDataport() - { - FTRACE(FPrint(_L( "CDunNetDataport::~CDunNetDataport()"))); - TInt i; - TInt count = iEntities.Count(); - for ( i=0; i MDunNetwork). -// Initializes network for Dataport -// Must be called before any other operation -// --------------------------------------------------------------------------- -// -void CDunNetDataport::InitializeL() - { - FTRACE(FPrint(_L( "CDunNetDataport::InitializeL()"))); - AllocatePhoneObjectsL(); - FTRACE(FPrint(_L( "CDunNetDataport::InitializeL() complete"))); - } - -// --------------------------------------------------------------------------- -// From class MDunNetDataport. -// Called when channel was created by transporter for Dataport -// Initializes network for channel creation -// --------------------------------------------------------------------------- -// -TInt CDunNetDataport::AllocateChannel( RComm*& aComm ) - { - FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel()"))); - TInt firstFree = InitializeFirstFreeEntity(); - if ( firstFree < 0 ) - { - FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() (not found) complete"))); - return firstFree; - } - if ( firstFree >= iEntities.Count() ) - { - FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() (firstfree failed!) complete"))); - return KErrGeneral; - } - TInt retTemp = iEntities[firstFree].iMobileCall.OpenNewCall( iMobileLine ); - if ( retTemp != KErrNone ) - { - RemoveEntity( firstFree ); // remove unused initialized channel - FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() OpenNewCall FAILED %d" ), retTemp)); - return KErrGeneral; - } - retTemp = iEntities[firstFree].iMobileCall.Connect(); - if ( retTemp != KErrNone ) - { - RemoveEntity( firstFree ); // remove unused initialized channel - FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() iEntities[%d]->iMobileCall.Connect FAILED %d" ), firstFree, retTemp)); - return KErrGeneral; - } - RCall::TCommPort portName; - portName.iPort.Copy( DUN_GGP_DATAPORT_CSY ); - portName.iPort.Append( DUN_GGP_DATAPORT_CSY_PORT ); - retTemp = iEntities[firstFree].iMobileCall.LoanDataPort( portName ); - if ( retTemp != KErrNone ) - { - RemoveEntity( firstFree ); // remove unused initialized channel - if ( retTemp == KErrEtelPortNotLoanedToClient ) - { - FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() (too big) complete"))); - return KErrTooBig; - } - FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() iEntities[%d]->iMobileCall.LoanDataPort FAILED %d" ), firstFree, retTemp)); - return KErrGeneral; - } - FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() Created call object at index %d" ), firstFree)); - retTemp = iEntities[firstFree].iDataport.Open( iCommServer, - portName.iPort, - ECommExclusive, - ECommRoleDTE ); - if ( retTemp != KErrNone ) - { - RemoveEntity( firstFree ); // remove unused initialized channel - FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() FAILED to open dataport %d"), retTemp)); - return KErrGeneral; - } - iEntities[firstFree].iDataport.ResetBuffers(); - iEntities[firstFree].iEntityInUse = ETrue; - aComm = &iEntities[firstFree].iDataport; - FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() (iEntities[%d]->iDataport) opened"), firstFree)); - FTRACE(FPrint(_L( "CDunNetDataport::AllocateChannel() complete"))); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// From class MDunNetDataport. -// Called when channel was deleted/closed by transporter for Dataport -// Uninitializes network for channel deletion/close -// --------------------------------------------------------------------------- -// -TInt CDunNetDataport::FreeChannel( RComm* aComm ) - { - FTRACE(FPrint(_L( "CDunNetDataport::FreeChannel()"))); - TInt i; - TInt count = iEntities.Count(); - for ( i=0; i= count ) - { - FTRACE(FPrint(_L( "CDunNetDataport::FreeChannel() (not found) complete"))); - return KErrNotFound; - } - DeleteNetworkEntity( i, ETrue ); - FTRACE(FPrint(_L( "CDunNetDataport::FreeChannel() (iEntities[%d]->iDataport) freed"), i)); - FTRACE(FPrint(_L( "CDunNetDataport::FreeChannel() complete"))); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// From class MDunNetDataport. -// Gets index by network ID for Dataport -// --------------------------------------------------------------------------- -// -TInt CDunNetDataport::GetIndexById( RComm* aComm ) - { - FTRACE(FPrint(_L( "CDunNetDataport::GetIndexById()"))); - TInt i; - TInt count = iEntities.Count(); - for ( i=0; i=iNumOfMaxChannels ) - { - FTRACE(FPrint( _L("CDunNetDataport::InitializeFirstFreeEntity() (too big) complete" ))); - return KErrTooBig; - } - TDunDataportEntity emptyEntity; - emptyEntity.iEntityInUse = EFalse; - retTemp = iEntities.Append( emptyEntity ); - if ( retTemp != KErrNone ) - { - FTRACE(FPrint( _L("CDunNetDataport::InitializeFirstFreeEntity() (append failed!) complete" ))); - return retTemp; - } - FTRACE(FPrint(_L( "CDunNetDataport::InitializeFirstFreeEntity() complete"))); - return i; - } - -// --------------------------------------------------------------------------- -// Remove network entity by index -// --------------------------------------------------------------------------- -// -TInt CDunNetDataport::RemoveEntity( TInt aIndex ) - { - FTRACE(FPrint(_L( "CDunNetDataport::RemoveEntity()"))); - if ( aIndex < 0 || - aIndex >= iEntities.Count() ) - { - FTRACE(FPrint(_L( "CDunNetDataport::RemoveEntity() (not found) complete"))); - return KErrNotFound; - } - DeleteNetworkEntity( aIndex, EFalse ); - FTRACE(FPrint(_L( "CDunNetDataport::RemoveEntity() complete"))); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// Deletes own internal data -// --------------------------------------------------------------------------- -// -void CDunNetDataport::DeleteNetwork() - { - FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetwork()"))); - if ( iMobileLine.SubSessionHandle() ) - { - iMobileLine.Close(); - FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetwork() mobile line closed"))); - } - if ( iMobilePhone.SubSessionHandle() ) - { - iMobilePhone.Close(); - FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetwork() mobile phone closed"))); - } - if ( iTelServer.Handle() ) - { - iTelServer.UnloadPhoneModule( KMmTsyModuleName ); - FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetwork() phone module unloaded"))); - iTelServer.Close(); - FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetwork() phone module closed"))); - } - if ( iCommServer.Handle() ) - { - iCommServer.UnloadCommModule( DUN_GGP_DATAPORT_CSY ); - FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetwork() comm module unloaded"))); - iCommServer.Close(); - FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetwork() comm module closed"))); - } - iEntities.Close(); - FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetwork() complete"))); - } - -// --------------------------------------------------------------------------- -// Deletes one network entity at index aIndex for Dataport -// --------------------------------------------------------------------------- -// -TInt CDunNetDataport::DeleteNetworkEntity( TInt aIndex, TBool aCheckFree ) - { - FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetworkEntity()"))); - if ( aIndex < 0 || - aIndex >= iEntities.Count() ) - { - FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetworkEntity() (not found) complete"), aIndex)); - return KErrGeneral; - } - TDunDataportEntity& entity = iEntities[aIndex]; - if ( (aCheckFree&&entity.iEntityInUse) || !aCheckFree ) - { - if ( entity.iDataport.SubSessionHandle() ) - { - // The next will set KSignalDTEOutputs down twice for RComm - // local media case because CDunSignalCopy clears them also which - // in turn causes plugin to free channel. But this probably won't - // cause any harm. - entity.iDataport.SetSignals( 0, KSignalDTEOutputs ); - FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetworkEntity() RComm signals set"))); - entity.iDataport.Close(); - FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetworkEntity() RComm closed"))); - } - if ( entity.iMobileCall.SubSessionHandle() ) - { - entity.iMobileCall.RecoverDataPort(); - FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetworkEntity() Dataport recovered"))); - entity.iMobileCall.Close(); - FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetworkEntity() Dataport closed"))); - } - entity.iEntityInUse = EFalse; - } - FTRACE(FPrint(_L( "CDunNetDataport::DeleteNetworkEntity() complete"))); - return KErrNone; - }