diff -r 0aa8cc770c8a -r 4a793f564d72 localconnectivityservice/dun/utils/src/DunDataWaiter.cpp --- a/localconnectivityservice/dun/utils/src/DunDataWaiter.cpp Tue Aug 31 16:03:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,253 +0,0 @@ -/* -* Copyright (c) 2006-2007 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: Monitors for new data in RComm local media side -* -*/ - - -#include "DunTransporter.h" -#include "DunDataWaiter.h" -#include "DunSignalCopy.h" -#include "DunDebug.h" - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// Two-phased constructor. -// --------------------------------------------------------------------------- -// -CDunDataWaiter* CDunDataWaiter::NewL( MDunChannelAllocator* aChannelCallback ) - { - CDunDataWaiter* self = new (ELeave) CDunDataWaiter( aChannelCallback ); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; - } - -// --------------------------------------------------------------------------- -// Destructor. -// --------------------------------------------------------------------------- -// -CDunDataWaiter::~CDunDataWaiter() - { - FTRACE(FPrint( _L("CDunDataWaiter::~CDunDataWaiter()") )); - ResetData(); - FTRACE(FPrint( _L("CDunDataWaiter::~CDunDataWaiter() complete") )); - } - -// --------------------------------------------------------------------------- -// Resets data to initial values -// --------------------------------------------------------------------------- -// -void CDunDataWaiter::ResetData() - { - FTRACE(FPrint( _L("CDunDataWaiter::ResetData()") )); - Stop(); - // APIs affecting this: - // AddConnMonCallbackL() - iCallbacks.Close(); - // Internal - Initialize(); - FTRACE(FPrint( _L("CDunDataWaiter::ResetData() complete") )); - } - -// --------------------------------------------------------------------------- -// Adds callback for RunL error controlling -// The callback will be called when error is detected in asynchronous -// operation -// --------------------------------------------------------------------------- -// -TInt CDunDataWaiter::AddCallback( MDunConnMon* aCallback ) - { - FTRACE(FPrint( _L("CDunDataWaiter::AddCallback()" ) )); - if ( !aCallback ) - { - FTRACE(FPrint( _L("CDunDataWaiter::AddCallback() (ERROR) complete" ) )); - return KErrGeneral; - } - TInt retTemp = iCallbacks.Find( aCallback ); - if ( retTemp != KErrNotFound ) - { - FTRACE(FPrint( _L("CDunDataWaiter::AddCallback() (already exists) complete" ) )); - return KErrAlreadyExists; - } - retTemp = iCallbacks.Append( aCallback ); - if ( retTemp != KErrNone ) - { - FTRACE(FPrint( _L("CDunDataWaiter::AddCallback() (append failed!) complete" ) )); - return retTemp; - } - FTRACE(FPrint( _L("CDunDataWaiter::AddCallback() complete" ) )); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// Sets media to use for this endpoint -// --------------------------------------------------------------------------- -// -TInt CDunDataWaiter::SetMedia( RComm* aComm ) - { - FTRACE(FPrint( _L("CDunDataWaiter::SetMedia(RComm) (addr=0x%08X)" ), aComm)); - if ( !aComm ) - { - FTRACE(FPrint( _L("CDunDataWaiter::SetMedia() (aComm) not initialized!" ))); - return KErrGeneral; - } - TCommCaps2 caps; - aComm->Caps( caps ); - if ( !(caps().iNotificationCaps & KNotifyDataAvailableSupported) ) - { - FTRACE(FPrint( _L("CDunDataWaiter::SetMedia() (RComm) (not supported) complete" ))); - return KErrNotSupported; - } - iComm = aComm; - FTRACE(FPrint( _L("CDunDataWaiter::SetMedia() (RComm) complete" ))); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// Issues request to start waiting for new data in RComm -// --------------------------------------------------------------------------- -// -TInt CDunDataWaiter::IssueRequest() - { - FTRACE(FPrint( _L("CDunDataWaiter::IssueRequest()" ))); - if ( iDataWaiterState != EDunStateIdle ) - { - FTRACE(FPrint( _L("CDunDataWaiter::IssueRequest() (not ready) complete" ))); - return KErrNotReady; - } - if ( !iComm ) - { - FTRACE(FPrint( _L("CDunDataWaiter::IssueRequest() (iComm) not initialized!" ) )); - return KErrGeneral; - } - iStatus = KRequestPending; - iComm->ResetBuffers(); - iComm->NotifyDataAvailable( iStatus ); - SetActive(); - iDataWaiterState = EDunStateDataWaiting; - FTRACE(FPrint( _L("CDunDataWaiter::IssueRequest() complete" ))); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// Stops monitoring for new data -// --------------------------------------------------------------------------- -// -TInt CDunDataWaiter::Stop() - { - FTRACE(FPrint( _L("CDunDataWaiter::Stop()" ))); - if ( iDataWaiterState != EDunStateDataWaiting ) - { - FTRACE(FPrint( _L("CDunDataWaiter::Stop() (not ready) complete" ))); - return KErrNotReady; - } - if ( !iComm ) - { - FTRACE(FPrint( _L("CDunDataWaiter::Stop() (iComm) not initialized!" ))); - return KErrGeneral; - } - iComm->NotifyDataAvailableCancel(); - Cancel(); - iDataWaiterState = EDunStateIdle; - FTRACE(FPrint( _L("CDunDataWaiter::Stop() complete" ))); - return KErrNone; - } - -// --------------------------------------------------------------------------- -// CDunDataWaiter::CDunDataWaiter -// --------------------------------------------------------------------------- -// -CDunDataWaiter::CDunDataWaiter( MDunChannelAllocator* aChannelCallback ) : - CActive( EPriorityHigh ), - iChannelCallback( aChannelCallback ) - { - Initialize(); - } - -// --------------------------------------------------------------------------- -// CDunDataWaiter::ConstructL -// --------------------------------------------------------------------------- -// -void CDunDataWaiter::ConstructL() - { - FTRACE(FPrint( _L("CDunDataWaiter::ConstructL()" ) )); - if ( !iChannelCallback ) - { - User::Leave( KErrGeneral ); - } - CActiveScheduler::Add( this ); - FTRACE(FPrint( _L("CDunDataWaiter::ConstructL() complete" ) )); - } - -// --------------------------------------------------------------------------- -// Initializes this class -// --------------------------------------------------------------------------- -// -void CDunDataWaiter::Initialize() - { - FTRACE(FPrint( _L("CDunDataWaiter::Initialize()" ) )); - // Don't initialize iChannelCallback here (it is set through NewL) - iDataWaiterState = EDunStateIdle; - iComm = NULL; - FTRACE(FPrint( _L("CDunDataWaiter::Initialize() complete" ) )); - } - -// --------------------------------------------------------------------------- -// From class CActive. -// Gets called when new data in RComm object -// --------------------------------------------------------------------------- -// -void CDunDataWaiter::RunL() - { - FTRACE(FPrint( _L("CDunDataWaiter::RunL()" ) )); - iDataWaiterState = EDunStateIdle; - TInt retTemp = iStatus.Int(); - if ( retTemp != KErrNone ) - { - FTRACE(FPrint( _L("CDunDataWaiter::RunL() (failed) complete (%d)"), retTemp)); - TInt count = iCallbacks.Count(); - TDunConnectionReason connReason; - connReason.iReasonType = EDunReasonTypeRunL; - connReason.iContext = EDunMediaContextLocal; - connReason.iSignalType = 0; - connReason.iSignalHigh = EFalse; - connReason.iDirection = EDunDirectionUndefined; - connReason.iErrorCode = retTemp; - for ( TInt i=0; iNotifyProgressChangeL( iComm, connReason ) ); - } - return; - } - if ( iChannelCallback ) - { - iChannelCallback->NotifyNewChannelRequest( iComm ); - } - // Don't check other iMediaInUse values here - // They can't be other than EDunMediaRComm (checked in IssueRequest()) - FTRACE(FPrint( _L("CDunDataWaiter::RunL() complete" ) )); - } - -// --------------------------------------------------------------------------- -// From class CActive. -// Gets called on cancel -// --------------------------------------------------------------------------- -// -void CDunDataWaiter::DoCancel() - { - }