--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ipsservices/ipssosaoplugin/src/IpsSosAOPluginEComInterface.cpp Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,184 @@
+/*
+* Copyright (c) 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:
+* Main plugin class
+*
+*/
+
+#include "emailtrace.h"
+#include <e32base.h>
+
+#include <AlwaysOnlineManagerCommon.h>
+#include <AlwaysOnlineManagerClient.h>
+
+#include "IpsSosAOPluginEComInterface.h"
+#include "IpsSosAOSmtpSendWatcher.h"
+#include "IpsSosAOImapPopLogic.h"
+
+const TInt KIpsSosAOPluginCommandBufferGra = 1;
+
+
+// ----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+//
+CIpsSosAOPluginEComInterface::CIpsSosAOPluginEComInterface( ) :
+ CAlwaysOnlineEComInterface(),
+ iBufferedAOCommands( KIpsSosAOPluginCommandBufferGra )
+ {
+ FUNC_LOG;
+ }
+
+// ----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CIpsSosAOPluginEComInterface* CIpsSosAOPluginEComInterface::NewL( )
+ {
+ FUNC_LOG;
+ CIpsSosAOPluginEComInterface* self = new (
+ ELeave ) CIpsSosAOPluginEComInterface();
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+//
+void CIpsSosAOPluginEComInterface::ConstructL()
+ {
+ FUNC_LOG;
+ iSession = CMsvSession::OpenAsyncL( *this );
+ }
+
+// ----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+//
+void CIpsSosAOPluginEComInterface::CompleteConstructL()
+ {
+ FUNC_LOG;
+ iSendWatcher = CIpsSosAOSmtpSendWatcher::NewL(
+ CActive::EPriorityStandard, *iSession );
+ iImapPopLogic = CIpsSosAOImapPopLogic::NewL( *iSession );
+
+ // send buffered command at this point when logic objects is created
+ if ( iBufferedAOCommands.Count() > 0 )
+ {
+ for ( TInt i = 0; i < iBufferedAOCommands.Count(); i++ )
+ {
+ HandleServerCommandL( iBufferedAOCommands[i], NULL );
+ }
+ }
+ iBufferedAOCommands.Reset();
+ }
+
+// ----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+//
+CIpsSosAOPluginEComInterface::~CIpsSosAOPluginEComInterface()
+ {
+ FUNC_LOG;
+ delete iSendWatcher;
+ delete iImapPopLogic;
+ delete iSession;
+ iBufferedAOCommands.Close();
+ }
+
+// ----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TAny* CIpsSosAOPluginEComInterface::HandleServerCommandL(
+ TInt aCommand,
+ TDesC8* aParameters )
+ {
+ FUNC_LOG;
+ TInt result = KErrNotSupported;
+ if ( iSendWatcher && iImapPopLogic )
+ {
+ TInt imapPopResult = KErrNone;
+ imapPopResult = iImapPopLogic->HandleAOServerCommandL( aCommand, aParameters );
+
+ //don't care about smtp problems
+ result = imapPopResult;
+ }
+ else
+ {
+ // buffer important commands if iSmtpLogic and iImapPopLogic
+ // is no created. This needed because plugin is created in
+ // boot and there might be situation where AO server is created
+ // before MSV server
+ if ( aCommand == EAOManagerPluginStart
+ || aCommand == EAOManagerPluginStop
+ || aCommand == EAOManagerNWOpsNotAllowed
+ || aCommand == EAOManagerNWOpsAllowed
+ || aCommand == EAOManagerStartedRoaming
+ || aCommand == EAOManagerStoppedRoaming
+ || aCommand == EAOManagerDiskSpaceAboveCritical
+ || aCommand == EAOManagerDiskSpaceBelowCritical )
+ {
+ iBufferedAOCommands.AppendL( aCommand );
+ result = KErrNone;
+ }
+ }
+ return reinterpret_cast<TAny*>( result );
+ }
+
+
+// ----------------------------------------------------------------------------
+// ----------------------------------------------------------------------------
+void CIpsSosAOPluginEComInterface::HandleSessionEventL(
+ MMsvSessionObserver::TMsvSessionEvent aEvent,
+ TAny* aArg1,
+ TAny* aArg2,
+ TAny* aArg3 )
+ {
+ FUNC_LOG;
+ switch( aEvent )
+ {
+ case EMsvServerReady:
+ CompleteConstructL();
+ break;
+ case EMsvEntriesCreated:
+ case EMsvEntriesChanged:
+ case EMsvEntriesDeleted:
+ case EMsvEntriesMoved:
+ // send only to ImapPopLogic, because
+ // SmtpLogic not need these events
+ iImapPopLogic->HandleMsvSessionEventL(
+ aEvent, aArg1, aArg2, aArg3 );
+ break;
+ // handle these so that this process not panic if
+ // CMsvServer panics and restarts
+ case EMsvGeneralError:
+ case EMsvCloseSession:
+ case EMsvServerFailedToStart:
+ case EMsvCorruptedIndexRebuilt:
+ case EMsvServerTerminated:
+ break;
+ // are we intrest about these events at the moment
+ // FSEmail not support msv store changes?
+ case EMsvMtmGroupInstalled:
+ case EMsvMtmGroupDeInstalled:
+ case EMsvMediaChanged:
+ case EMsvMediaUnavailable:
+ case EMsvMediaAvailable:
+ case EMsvMediaIncorrect:
+ case EMsvCorruptedIndexRebuilding:
+ default:
+ break;
+ };
+ }
+
+//EOF
+