diff -r 000000000000 -r a4daefaec16c voipplugins/sipconnectionprovider/ipvoicemailengine/src/ipvmbxeventmonitor.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/voipplugins/sipconnectionprovider/ipvoicemailengine/src/ipvmbxeventmonitor.cpp Mon Jan 18 20:12:36 2010 +0200 @@ -0,0 +1,220 @@ +/* +* Copyright (c) 2002-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: Monitors Events from VoiceMailBox -server +* +*/ + + + +#include +#include +#include + +#include "ipvmbxeventmonitor.h" +#include "ipvmbxengine.h" +#include "ipvmbxlogger.h" +#include "ipvmbxpanic.h" +#include "ipvmbxbase.h" +#include "ipvmbxconstants.h" + + +// ============================ MEMBER FUNCTIONS ============================== + +// ---------------------------------------------------------------------------- +// C++ default constructor can NOT contain any code, that +// might leave. +// ---------------------------------------------------------------------------- +// +TIpVmbxEventMonitor::TIpVmbxEventMonitor( CIpVmbxEngine& aEngine ) : + iEngine( aEngine ) + { + } + + +// ---------------------------------------------------------------------------- +// +// ---------------------------------------------------------------------------- +// +void TIpVmbxEventMonitor::EventStateChanged( + CMceEvent& aEvent, + TMceTransactionDataContainer* /*aContainer*/ ) + { + IPVMEPRINT2( + "CIpVmbxEventMonitor::EventStateChanged: %d", + aEvent.State() ); + + CIpVmbxBase* subscription( + iEngine.SubscriptionByRecipient( aEvent.Recipient() ) ); + if ( subscription ) + { + CIpVmbxEngine::TIpVmbxMessages message = + CIpVmbxEngine::EEngineUndefined; + + switch ( aEvent.State() ) + { + case CMceEvent::ETerminated: + { + if ( CIpVmbxBase::ETerminating == subscription->State() ) + { + IPVMEPRINT( + "CIpVmbxEventMonitor state: CMceEvent::ETerminated" ); + // Normal unsubscription case + message = CIpVmbxEngine::EEngineTerminated; + } + else + if ( CIpVmbxBase::ERegistered == subscription->State() ) + { + // Network stops responding + message = CIpVmbxEngine::EEngineNetworkLost; + } + else + { + // Network does not accept subscription + message = CIpVmbxEngine::EEngineSubscribeRejected; + } + break; + } + case CMceEvent::EPending: + // Occures on rare + message = CIpVmbxEngine::EEngineSubscribeRejected; + break; + case CMceEvent::EActive: + case CMceEvent::EIdle: + { + // This should never happen + message = CIpVmbxEngine::EEngineUndefined; + break; + } + default: + IPVMEPRINT( "Unhandled message!" ); + } + + iEngine.HandleMessage( subscription->ServiceProviderId(), message ); + } + } + + +// ---------------------------------------------------------------------------- +// +// ---------------------------------------------------------------------------- +// +void TIpVmbxEventMonitor::NotifyReceived( + CMceEvent& aEvent, + TMceTransactionDataContainer* /*aContainer*/ ) + { + IPVMEPRINT( "CIpVmbxEventMonitor::NotifyReceived" ); + CMceEvent::TState eventState( CMceEvent::EIdle ); + eventState = aEvent.State(); + TBool firstNotify = EFalse; + + CIpVmbxBase* subscription( + iEngine.SubscriptionByRecipient( aEvent.Recipient() ) ); + if ( subscription ) + { + CIpVmbxEngine::TIpVmbxMessages message = + CIpVmbxEngine::EEngineUndefined; + + switch ( eventState ) + { + case CMceEvent::EActive: + { + IPVMEPRINT( + "CIpVmbxEventMonitor state: CMceEvent::EActive" ); + if ( CIpVmbxBase::ETerminating != subscription->State() && + CIpVmbxBase::ERegistered != subscription->State() ) + { + + subscription->SetStateRegistered(); + firstNotify = ETrue; + } + + TRAPD( err, iEngine.EventReceivedL( aEvent.Recipient() ) ); + if ( err ) + { + if ( KErrNoMemory == err ) + { + message = CIpVmbxEngine::EEngineSmsOom; + } + else + { + message = CIpVmbxEngine::EEngineSmsError; + } + } + else + if ( firstNotify ) + { + message = CIpVmbxEngine::EEngineSubscribed; + } + else + { + message = CIpVmbxEngine::EEngineUndefined; + } + } + break; + case CMceEvent::ETerminated: + // flow through + case CMceEvent::EIdle: + // flow through + case CMceEvent::EPending: + // flow through + default: + IPVMEPRINT( "Unhandled message!" ); + } + + iEngine.HandleMessage( subscription->ServiceProviderId(), message ); + } + } + + +// ---------------------------------------------------------------------------- +// +// ---------------------------------------------------------------------------- +// +void TIpVmbxEventMonitor::EventConnectionStateChanged( + CMceEvent& /*aEvent*/, + TBool /*aActive*/ ) + { + IPVMEPRINT( "CIpVmbxEventMonitor::EventConnectionStateChanged" ); + } + + +// ---------------------------------------------------------------------------- +// +// ---------------------------------------------------------------------------- +// +void TIpVmbxEventMonitor::Failed( CMceEvent& aEvent, TInt aError ) + { + IPVMEPRINT2( "CIpVmbxEventMonitor::Failed: %d", aError ); + CIpVmbxBase* subscription( + iEngine.SubscriptionByRecipient( aEvent.Recipient() ) ); + if ( subscription ) + { + CIpVmbxEngine::TIpVmbxMessages message = + CIpVmbxEngine::EEngineUndefined; + + switch ( aError ) + { + case KErrSIPTransportFailure: + message = CIpVmbxEngine::EEngineIncorrectAccount; + break; + case KErrTimedOut: + message = CIpVmbxEngine::EEngineSubscribeRejected; + break; + default: + message = CIpVmbxEngine::EEngineNetworkError; + } + + iEngine.HandleMessage( subscription->ServiceProviderId(), message ); + } + }