--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/connectivitymodules/SeCon/cntparser/src/cntparserserverexe.cpp Tue Feb 02 01:11:40 2010 +0200
@@ -0,0 +1,322 @@
+/*
+* Copyright (c) 2002-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: CCntParserServer implementation.
+*
+*/
+
+
+#include "clientserver.h"
+#include "cntparserserver.h"
+#include "cntparserserversession.h"
+#include "irmcconsts.h"
+
+#include "debug.h"
+
+#include <cntdb.h>
+
+//------------------------------------------------------------
+// RunServer
+//------------------------------------------------------------
+TInt CCntParserServer::RunServer()
+ {
+ LOGGER_ENTERFN( "CCntParserServer::RunServer" );
+
+ CTrapCleanup* cleanup = CTrapCleanup::New();
+ TInt ret( KErrNoMemory );
+ if( cleanup )
+ {
+ TRAP( ret, CCntParserServer::RunServerL() );
+ delete cleanup;
+ }
+ if( ret != KErrNone )
+ {
+ // Signal the client that server creation failed
+ RProcess::Rendezvous( ret );
+ }
+ LOGGER_LEAVEFN( "CCntParserServer::RunServer" );
+ return ret;
+ }
+//------------------------------------------------------------
+// RunServerL
+//------------------------------------------------------------
+void CCntParserServer::RunServerL()
+ {
+ // Create and install the active scheduler we need
+ LOGGER_ENTERFN( "CCntParserServer::RunServerL" );
+ CActiveScheduler *as=new (ELeave)CActiveScheduler;
+ CleanupStack::PushL( as );
+ CActiveScheduler::Install( as );
+
+ // Create server
+ CCntParserServer::NewL();
+
+ // Initialisation complete, now signal the client
+ User::LeaveIfError( RThread().RenameMe( KTxtServer ) );
+ RProcess::Rendezvous( KErrNone );
+
+ // Ready to run
+ CActiveScheduler::Start();
+
+ // Cleanup the scheduler
+ CleanupStack::PopAndDestroy( as );
+ LOGGER_LEAVEFN( "CCntParserServer::RunServerL" );
+ }
+//------------------------------------------------------------
+// E32Main()
+//------------------------------------------------------------
+TInt E32Main()
+ {
+ return CCntParserServer::RunServer();
+ }
+//------------------------------------------------------------
+// PanicServer(TCntParserServerPanic aPanic)
+//------------------------------------------------------------
+GLDEF_C void PanicServer(TCntParserServerPanic aPanic)
+ {
+ LOGGER_WRITE( "PANIC SERVER!" );
+ _LIT(KTxtServerPanic,"Parser server panic");
+ User::Panic( KTxtServerPanic, aPanic );
+ }
+
+
+//**********************************
+//CCntParserServer
+//**********************************
+
+//------------------------------------------------------------
+// CCntParserServer::CCntParserServer()
+//------------------------------------------------------------
+CCntParserServer::CCntParserServer() : CServer2( EPriorityStandard )
+ {
+ }
+//------------------------------------------------------------
+// CCntParserServer::~CCntParserServer()
+//------------------------------------------------------------
+EXPORT_C CCntParserServer::~CCntParserServer()
+ {
+ if( iCollector )
+ {
+ iCollector->Cancel();
+ }
+ delete iCollector;
+ delete iCurrentDatabase;
+ LOGGER_WRITE( "CntParserServer: DELETED!" );
+ }
+//------------------------------------------------------------
+// CCntParserServer* CCntParserServer::NewL()
+//------------------------------------------------------------
+EXPORT_C CCntParserServer* CCntParserServer::NewL()
+ {
+ LOGGER_WRITE( "CntParserServer: NEW" );
+ CCntParserServer* pS=new (ELeave) CCntParserServer();
+ CleanupStack::PushL(pS);
+ pS->StartL( KCntParserName );
+ CleanupStack::Pop( pS );
+ LOGGER_WRITE( "CntParserServer: Created" );
+ return pS;
+ }
+//------------------------------------------------------------
+// CCntParserServer::NewSessionL(const TVersion &aVersion, const RMessage2& /*aMsg*/) const
+//------------------------------------------------------------
+CSession2* CCntParserServer::NewSessionL(const TVersion &aVersion, const RMessage2& /*aMsg*/) const
+ {
+ LOGGER_WRITE( "CntParserServer: NEW SessionL" );
+ // check we're the right version
+ TVersion v( KCntParserMajorVersionNumber,KCntParserMinorVersionNumber,KCntParserBuildVersionNumber );
+ if ( !User::QueryVersionSupported( v,aVersion ) )
+ User::Leave( KErrNotSupported );
+ CCntParserServerSession* self=CCntParserServerSession::NewL( (CCntParserServer*)this );
+ return self;
+ }
+//------------------------------------------------------------
+// CCntParserServer::IncreaseSessionCountL()
+//------------------------------------------------------------
+void CCntParserServer::IncreaseSessionCountL()
+ {
+ LOGGER_WRITE( "CntParserServer: Increase Session Count" );
+ iSessionCount++;
+ if( iSessionCount == 1 ) //If first session, prepare collector
+ {
+ PrepareCollectorL();
+ }
+ }
+//------------------------------------------------------------
+// CCntParserServer::DecreaseSessionCount()
+//------------------------------------------------------------
+void CCntParserServer::DecreaseSessionCount()
+ {
+ LOGGER_WRITE( "CntParserServer: Decrease Session Count" );
+ iSessionCount--;
+ if( iSessionCount==0 ) //if last session is disconnected, delete server
+ {
+ Stop();
+ }
+ }
+//------------------------------------------------------------
+// CCntParserServer::ContactsParsed()
+//------------------------------------------------------------
+TInt CCntParserServer::ContactsParsed()
+ {
+ return iCollector->CurrentItem();
+ }
+//------------------------------------------------------------
+// CCntParserServer::TotalNumOfContacts()
+//------------------------------------------------------------
+TInt CCntParserServer::TotalNumOfContacts()
+ {
+ //After the PrepareCollector is called, the number of contacts can be returned
+ return iCollector->Count();
+ }
+//------------------------------------------------------------
+// CCntParserServer::ContactsSaved()
+//------------------------------------------------------------
+TInt CCntParserServer::ContactsSaved()
+ {
+ return iCollector->ContactsSaved();
+ }
+//------------------------------------------------------------
+// CCntParserServer::PrepareCollectorL()
+//------------------------------------------------------------
+void CCntParserServer::PrepareCollectorL()
+ {
+ LOGGER_WRITE( "CntParserServer: Prepare collectorL: Open Contact Database" );
+
+ TFileName dbFile;
+ TFileName defaultDb;
+
+ CContactDatabase::GetDefaultNameL( defaultDb );
+
+ LOGGER_WRITE( "CntParserServer: Prepare collectorL: GetDefault" );
+
+ iCurrentDatabase=CContactDatabase::OpenL();
+
+ LOGGER_WRITE( "CntParserServer: Prepare collectorL: OpenDefault" );
+
+ iCurrentDatabase->GetCurrentDatabase( dbFile ); //Get selected database
+
+ LOGGER_WRITE( "CntParserServer: Prepare collectorL: CompareDefault" );
+
+ if( dbFile.CompareF(defaultDb)!=0 && dbFile!=KNullDesC16 /*&& dbFile.CompareF(KSimDummyDatabase)!=0*/) //If the selected database is not the default and something is selected
+ {
+ LOGGER_WRITE( "CntParserServer: Prepare collectorL: Close Default" );
+ delete iCurrentDatabase;
+ iCurrentDatabase = NULL;
+
+ LOGGER_WRITE( "CntParserServer: Prepare collectorL: OpenSelected" );
+ iCurrentDatabase=CContactDatabase::OpenL( dbFile ); //open the selected one
+ }
+
+ LOGGER_WRITE( "CntParserServer: Prepare collectorL: Is everything ok?" );
+ if( !iCurrentDatabase )
+ {
+ User::Leave( KErrNotFound );
+ }
+
+ LOGGER_WRITE( "CntParserServer: Prepare collectorL: Create Collector" );
+ iCollector = CCntParserCollector::NewL( this,iCurrentDatabase );
+
+ iRequests = 0;
+ }
+//------------------------------------------------------------
+// CCntParserServer::CreateIrMCL2PhoneBookL()
+//------------------------------------------------------------
+TInt CCntParserServer::CreateIrMCL2PhoneBookL(const TDesC& path, TInt aMaxNumberOfContacts,TBool aForced)
+ {
+ LOGGER_WRITE( "CntParserServer: CreateIrMCL2PhoneBookL" );
+
+ TInt err( KErrNone );
+
+ iRequests++;
+ if( iRequests == 1 )
+ {
+ LOGGER_WRITE( "CntParserServer: CreateIrMCL2PhoneBookL: Ready to call collector" );
+
+ err = iCollector->CreateIrMCL2FileL( path,aMaxNumberOfContacts,aForced );
+ if( err==KPBNotUpdated )
+ {
+ iRequests = 0; //If the file exists (no parsing), then more requests can be made
+ }
+ }
+ else
+ {
+ return KErrNotReady;
+ }
+ return err;
+ }
+//------------------------------------------------------------
+// CCntParserServer::CompletePhoneBookRequests()
+//------------------------------------------------------------
+void CCntParserServer::CompletePhoneBookRequests(TInt aErr) //Goes through all the sessions and completes the request
+ {
+ LOGGER_WRITE( "CntParserServer: Complete phonebook request" );
+ iSessionIter.SetToFirst();
+ while( iSessionIter!=NULL ) //Go through all sessions
+ {
+ ( (CCntParserServerSession*) (iSessionIter++) )->CompletePhoneBookRequest( aErr );
+ }
+ iRequests = 0; //Collector is ready to start again..
+ }
+//------------------------------------------------------------
+// CCntParserServer::CancelPhoneBookRequest()
+//------------------------------------------------------------
+void CCntParserServer::CancelPhoneBookRequest()
+ {
+ if( iRequests == 1 )
+ {
+ iCollector->Cancel();
+ }
+ iRequests--;
+ }
+//------------------------------------------------------------
+// CCntParserServer::CancelAllPhoneBookRequests()
+//------------------------------------------------------------
+void CCntParserServer::CancelAllPhoneBookRequests()
+ {
+ iCollector->Cancel();
+ iRequests = 0;
+ }
+//------------------------------------------------------------
+// CCntParserServer::Disconnect()
+//------------------------------------------------------------
+void CCntParserServer::Disconnect()
+ {
+ LOGGER_WRITE( "CntParserServer: Disconnect" );
+ }
+//------------------------------------------------------------
+// CCntParserServer::Stop()
+//------------------------------------------------------------
+void CCntParserServer::Stop()
+ {
+ LOGGER_ENTERFN( "CntParserServer::Stop()" );
+ if( iCollector )
+ {
+ iCollector->Cancel();
+ }
+ delete iCollector;
+ iCollector = NULL;
+ delete iCurrentDatabase;
+ iCurrentDatabase = NULL;
+ CActiveScheduler::Stop();
+ LOGGER_LEAVEFN( "CntParserServer::Stop()" );
+ }
+//------------------------------------------------------------
+// CCntParserServer::SetRequests()
+//------------------------------------------------------------
+void CCntParserServer::SetRequests(TInt aRequests)
+ {
+ iRequests=aRequests;
+ }
+
+
+