diff -r 6a20128ce557 -r ebfee66fde93 mmsengine/mmshttptransport/src/mmsbearerstatus.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmsengine/mmshttptransport/src/mmsbearerstatus.cpp Fri Jun 04 10:25:39 2010 +0100 @@ -0,0 +1,202 @@ +/* +* Copyright (c) 2002-2006 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: +* This class implements notifications from bearers which is needed when +* transferring data to/from WAP GW. +* +*/ + + + +// INCLUDE FILES +#include + +#include "mmsbearerstatus.h" +#include "mmssession.h" +#include "mmstransportobserver.h" +#include "mmsservercommon.h" +#include "MmsServerDebugLogging.h" + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// C++ constructor +// --------------------------------------------------------- +// +CMmsBearerStatus::CMmsBearerStatus() + :CActive ( EPriorityStandard), + iRequester ( NULL ), + iConnected( EFalse ), + iSuspended( EFalse ) + { + iBearerType = EMmsBearerGprs; // default + } + +// --------------------------------------------------------- +// CMmsBearerStatus::ConstructL +// --------------------------------------------------------- +// +void CMmsBearerStatus::ConstructL( RConnection& aRConnection ) + { + LOG( _L("CMmsBearerStatus::ConstructL") ); + iRConnection = &aRConnection; + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------- +// Symbian two-phased constructor +// --------------------------------------------------------- +// +CMmsBearerStatus* CMmsBearerStatus::NewL( RConnection& aRConnection ) + { + CMmsBearerStatus* self = new ( ELeave ) CMmsBearerStatus(); + CleanupStack::PushL( self ); + self->ConstructL( aRConnection ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------- +// Destructor +// --------------------------------------------------------- +// +CMmsBearerStatus::~CMmsBearerStatus() + { + Cancel(); + } + +// --------------------------------------------------------- +// CMmsBearerStatus::IsGprs +// --------------------------------------------------------- +// +TBool CMmsBearerStatus::IsGprs() const + { + if( iBearerType == EMmsBearerGprs ) + { + return ETrue; + } + else + { + return EFalse; + } + } + +// --------------------------------------------------------- +// CMmsBearerStatus::IsSuspendedL +// --------------------------------------------------------- +// +TBool CMmsBearerStatus::IsSuspended() + { + if( iBearerType != EMmsBearerGprs ) + { + LOG( _L("CMmsBearerStatus::IsSuspended: Something wrong, no GPRS!") ); + return EFalse; + } + TNifProgress nifProgress; + TInt err = iRConnection->Progress( nifProgress ); + if( err == KErrNone ) + { + if( nifProgress.iStage == KDataTransferTemporarilyBlocked ) + { + iSuspended = ETrue; + return ETrue; + } + } + return EFalse; + } + +// --------------------------------------------------------- +// CMmsBearerStatus::SubscribeNotification +// --------------------------------------------------------- +// +void CMmsBearerStatus::SubscribeNotification( MMmsTransportObserver* aRequester ) + { + LOG( _L("CMmsBearerStatus::SubscribeNotification") ); + + iRequester = ( MMmsTransportObserver* ) aRequester; + // set status to pending to make sure that it is RNif + // that sets it to complete + iStatus = KRequestPending; + iRConnection->ProgressNotification( iProgressBuffer, iStatus ); + +#ifndef _NO_MMSS_LOGGING_ + if( IsActive() ) + { + LOG( _L(" - already active") ); + } +#endif //_NO_MMSS_LOGGING_ + SetActive(); + } + +// --------------------------------------------------------- +// CMmsBearerStatus::RunL +// --------------------------------------------------------- +// +void CMmsBearerStatus::RunL() + { +#ifndef _NO_MMSS_LOGGING_ + if( iStatus.Int() != KErrNone ) + { + LOG2( _L("ERROR in CMmsBearerStatus::RunL status %d)"), iStatus.Int() ); + } + LOG2( _L("CMmsBearerStatus::RunL(): progress stage %d"), iProgressBuffer().iStage ); +#endif //_NO_MMSS_LOGGING_ + + + if( iProgressBuffer().iStage == KLinkLayerClosed && iConnected ) + { + iConnected = EFalse; + iRequester->TransferCancelled(); + } + else if( iProgressBuffer().iStage == KLinkLayerOpen ) + { + iConnected = ETrue; + if( iSuspended ) + { + iSuspended = EFalse; + iRequester->GprsResumed(); + // GprsResumed() puts the observer (this) active if necessary + } + else + { + SubscribeNotification( iRequester ); + } + } + else if( iProgressBuffer().iStage == KDataTransferTemporarilyBlocked ) + { + iSuspended = ETrue; + iRequester->GprsSuspended(); + SubscribeNotification( iRequester ); + } + else + { + // Some other state, not really interested about those... + SubscribeNotification( iRequester ); + } + } + +// --------------------------------------------------------- +// CMmsBearerStatus::DoCancel +// --------------------------------------------------------- +// +void CMmsBearerStatus::DoCancel() + { + LOG( _L("CMmsBearerStatus::DoCancel") ); + iRConnection->CancelProgressNotification(); + } + +// ================= OTHER EXPORTED FUNCTIONS ============== + +// End of File +