--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/alwaysonline/AlwaysOnlineManager/src/AlwaysOnlineManagerServer.cpp Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,290 @@
+/*
+* Copyright (c) 2002 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: AlwaysOnline server
+*
+*/
+
+
+#include "AlwaysOnlineManagerServer.h"
+#include "AlwaysOnlineManagerServerSession.h"
+#include "AlwaysOnlineManagerStartupSignaller.h"
+#include "AlwaysOnlineManagerLogging.h"
+
+
+
+//constants
+
+//---------------------------------------------
+// CAlwaysOnlineManagerServer()
+//---------------------------------------------
+CAlwaysOnlineManagerServer::CAlwaysOnlineManagerServer( TInt aPriority )
+ : CPolicyServer( aPriority, KAOMServerPolicy )
+ {
+ KAOMANAGER_LOGGER_FN1("CAlwaysOnlineManagerServer::CAlwaysOnlineManagerServer");
+ KAOMANAGER_LOGGER_FN2("CAlwaysOnlineManagerServer::CAlwaysOnlineManagerServer");
+ }
+
+//---------------------------------------------
+// NewL()
+//---------------------------------------------
+EXPORT_C CAlwaysOnlineManagerServer* CAlwaysOnlineManagerServer::NewL()
+ {
+ KAOMANAGER_LOGGER_FN1("CAlwaysOnlineManagerServer::NewL");
+ CAlwaysOnlineManagerServer* self = new (ELeave)
+ CAlwaysOnlineManagerServer( EAlwaysOnlineManagerServerPriority );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ self->StartL( KAlwaysOnlineManagerServerName );
+ KAOMANAGER_LOGGER_FN2("CAlwaysOnlineManagerServer::NewL");
+ return self;
+ }
+
+
+//---------------------------------------------
+// ConstructL()
+//---------------------------------------------
+void CAlwaysOnlineManagerServer::ConstructL()
+ {
+ KAOMANAGER_LOGGER_FN1("CAlwaysOnlineManagerServer::ConstructL");
+ iManager = NULL;
+
+ TRAPD(err, iManager = CAlwaysOnlineManager::NewL(this) );
+
+ if( err==KErrNone )
+ {
+ TRAPD(err2, iManager->DoStartL() );
+ if(err2!=KErrNone)
+ {
+ KAOMANAGER_LOGGER_WRITE_FORMAT("Manager Start failed, err2:%d", err2 );
+ PanicServer( EAOMServerStartFail );
+ }
+ }
+ else
+ {
+ KAOMANAGER_LOGGER_WRITE_FORMAT("Manager NewL failed, err:%d", err );
+ PanicServer( EAOMServerStartFail );
+ }
+ KAOMANAGER_LOGGER_FN2("CAlwaysOnlineManagerServer::ConstructL");
+ }
+
+//---------------------------------------------
+// ~CAlwaysOnlineManagerServer()
+//---------------------------------------------
+CAlwaysOnlineManagerServer::~CAlwaysOnlineManagerServer()
+ {
+ KAOMANAGER_LOGGER_FN1("CAlwaysOnlineManagerServer::~");
+ //we should never come here while phone is switched on
+ delete iManager;
+ //delete iSession;
+ KAOMANAGER_LOGGER_FN2("CAlwaysOnlineManagerServer::~");
+ }
+
+//---------------------------------------------
+// HandleClientCommandL()
+//---------------------------------------------
+//
+EXPORT_C void CAlwaysOnlineManagerServer::HandleClientCommandL(
+ TAlwaysOnlineServerAPICommands aCommand, TDes8& aParameter )
+ {
+ iManager->BroadcastClientCommandL( aCommand, aParameter );
+ }
+
+//---------------------------------------------
+// NewSessionL()
+//---------------------------------------------
+CSession2* CAlwaysOnlineManagerServer::NewSessionL(const TVersion &aVersion,
+ const RMessage2& /*aMessage*/) const
+ {
+ KAOMANAGER_LOGGER_FN1("CAlwaysOnlineManagerServer::NewSessionL");
+ // check we're the right version
+ TVersion v( KAlwaysOnlineMajorVersionNumber,
+ KAlwaysOnlineMinorVersionNumber,
+ KAlwaysOnlineVersionNumber );
+
+ if (!User::QueryVersionSupported( v, aVersion ))
+ User::Leave( KErrNotSupported );
+
+ // make new session
+ KAOMANAGER_LOGGER_FN2("CAlwaysOnlineManagerServer::NewSessionL");
+ return CAlwaysOnlineManagerServerSession::NewL( (CAlwaysOnlineManagerServer*)this );
+ }
+
+//---------------------------------------------
+// PanicServer()
+//---------------------------------------------
+void CAlwaysOnlineManagerServer::PanicServer( TAlwaysOnlineManagerPanic aPanic )
+ {
+ _LIT(KTxtAlwaysOnlineManagerServer,"CAlwaysOnlineManagerServer");
+ User::Panic(KTxtAlwaysOnlineManagerServer, aPanic);
+ }
+
+//**********************************
+//Global functions
+//**********************************
+
+
+//---------------------------------------------
+// RunServer()
+//---------------------------------------------
+TInt CAlwaysOnlineManagerServer::RunServer(TOAManagerStartupSignaller& aSignaller)
+ {
+ KAOMANAGER_LOGGER_FN1("CAlwaysOnlineManagerServer::RunServer");
+ __UHEAP_MARK;
+ //
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+ TInt ret = KErrNoMemory;
+ if (cleanup)
+ {
+ TRAP(ret, CAlwaysOnlineManagerServer::RunServerL(aSignaller));
+ delete cleanup;
+ }
+ //
+ __UHEAP_MARKEND;
+ KAOMANAGER_LOGGER_FN2("CAlwaysOnlineManagerServer::RunServer");
+ return ret;
+ }
+
+
+
+//---------------------------------------------
+// RunServer()
+//---------------------------------------------
+void CAlwaysOnlineManagerServer::RunServerL(TOAManagerStartupSignaller& aSignaller)
+ {
+ KAOMANAGER_LOGGER_FN1("CAlwaysOnlineManagerServer::RunServerL");
+ // Naming the server thread after the server helps to debug panics
+ User::LeaveIfError( User::RenameThread( KAlwaysOnlineManagerServerName ) );
+
+ // Create and install the active scheduler we need
+ CActiveScheduler* scheduler = new(ELeave) CActiveScheduler;
+ CleanupStack::PushL( scheduler );
+ __ASSERT_ALWAYS( scheduler,PanicServer( EMainSchedulerError ) );
+ CActiveScheduler::Install( scheduler );
+
+ // construct server, an active object
+ CAlwaysOnlineManagerServer* server = CAlwaysOnlineManagerServer::NewL();
+ CleanupStack::PushL( server );
+
+ // Initialisation complete, now signal the client
+ aSignaller.SignalL();
+
+ // Ready to run
+ CActiveScheduler::Start(); // CSI: 3 # This is only easy way...
+
+ // Cleanup the server and scheduler
+ CleanupStack::PopAndDestroy( 2, scheduler ); // CSI: 47,12 # scheduler, server
+ KAOMANAGER_LOGGER_FN2("CAlwaysOnlineManagerServer::RunServerL");
+ }
+
+//*************************************************************************************
+TInt CAlwaysOnlineManagerServer::ServerThreadFunction(TAny* aParameters)
+ {
+ KAOMANAGER_LOGGER_FN2("CAlwaysOnlineManagerServer::ServerThreadFunction");
+ TOAManagerStartupSignaller* parameters = static_cast<TOAManagerStartupSignaller*>(aParameters);
+ TInt ret = RunServer(*parameters);
+ KAOMANAGER_LOGGER_FN2("CAlwaysOnlineManagerServer::ServerThreadFunction");
+ return ret;
+ }
+
+
+///////////////////////////////////////////////////////////////////////////////////////
+// ----> TOAManagerStartupSignaller (source)
+///////////////////////////////////////////////////////////////////////////////////////
+
+//*************************************************************************************
+void TOAManagerStartupSignaller::SignalL()
+ {
+ // Signal the owning thread that the server has started successfully
+ // This may itself fail
+ KAOMANAGER_LOGGER_FN1("TOAManagerStartupSignaller::SignalL");
+ RThread startingThread;
+ User::LeaveIfError(startingThread.Open(iThreadId));
+ startingThread.RequestComplete(iStatus, KErrNone);
+ startingThread.Close();
+ KAOMANAGER_LOGGER_FN2("TOAManagerStartupSignaller::SignalL");
+ }
+
+
+///////////////////////////////////////////////////////////////////////////////////////
+// ----> Global kick-off methods (source)
+///////////////////////////////////////////////////////////////////////////////////////
+
+
+//*************************************************************************************
+IMPORT_C TInt WinsMain();
+EXPORT_C TInt WinsMain()
+ {
+ // WINS DLL entry-point. Just return the real thread function
+ // cast to TInt
+ return reinterpret_cast<TInt>(&CAlwaysOnlineManagerServer::ServerThreadFunction);
+ }
+
+
+//*************************************************************************************
+
+
+//*************************************************************************************
+TInt TOAManagerStartupSignaller::GetCommand()
+ {
+ // Validate the size of the command line.
+ KAOMANAGER_LOGGER_FN1("TOAManagerStartupSignaller::GetCommand");
+
+ if ( User::CommandLineLength() !=
+ sizeof( TOAManagerStartupSignaller ) / sizeof( TText ) )
+ {
+ KAOMANAGER_LOGGER_FN2( "TOAManagerStartupSignaller::GetCommand error" );
+ return KErrGeneral;
+ }
+
+ // Get the command line
+ TPtr pCommandLine(
+ reinterpret_cast<TText*>( this ), 0,
+ sizeof( TOAManagerStartupSignaller ) / sizeof( TText ) );
+ User::CommandLine( pCommandLine );
+ //
+ KAOMANAGER_LOGGER_FN2( "TOAManagerStartupSignaller::GetCommand" );
+ return KErrNone;
+ }
+
+//*************************************************************************************
+TInt E32Main()
+ {
+ // Fetch the startup parameters from the command line.
+ KAOMANAGER_LOGGER_FN1("E32Main");
+ TOAManagerStartupSignaller signaller;
+ TInt error = signaller.GetCommand();
+
+ // If there wasn't an error fetching the command line parameters
+ // then we attempt to start the server.
+ if (error == KErrNone)
+ {
+ error = CAlwaysOnlineManagerServer::RunServer(signaller);
+ }
+ KAOMANAGER_LOGGER_FN2("E32Main");
+ return error;
+ }
+
+//#endif
+
+
+EXPORT_C GLDEF_C TInt CAlwaysOnlineManagerServer::ThreadFunction( TAny* aParameters )
+ {
+ KAOMANAGER_LOGGER_FN1("CAlwaysOnlineManagerServer::ThreadFunction");
+ TOAManagerStartupSignaller* parameters = static_cast<TOAManagerStartupSignaller*>(aParameters);
+ TInt retVal = RunServer(*parameters);
+ KAOMANAGER_LOGGER_FN2("CAlwaysOnlineManagerServer::ThreadFunction");
+ return retVal;
+ }
+