diff -r 2bb96f4ecad8 -r 8e7494275d3a connectivitymodules/SeCon/cntparser/src/cntparserserversession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/connectivitymodules/SeCon/cntparser/src/cntparserserversession.cpp Tue Aug 31 15:05:37 2010 +0300 @@ -0,0 +1,219 @@ +/* +* 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: CCntParserServerSession implementation. +* +*/ + + +#include "cntparserserversession.h" +#include +#include "cntparsercollector.h" +#include "cntparserinfolog.h" +#include "irmcconsts.h" + +#include "debug.h" + +//------------------------------------------------------------ +// CCntParserServerSession::CCntParserServerSession() +//------------------------------------------------------------ +CCntParserServerSession::CCntParserServerSession() + { + } +//------------------------------------------------------------ +// CCntParserServerSession::NewL(CCntParserServer* aServer) +//------------------------------------------------------------ +CCntParserServerSession* CCntParserServerSession::NewL( CCntParserServer* aServer ) + { + LOGGER_ENTERFN( "CntParserServerSession::NewL()" ); + + CCntParserServerSession* self = new( ELeave ) CCntParserServerSession(); + CleanupStack::PushL( self ); + self->ConstructL( aServer ); + CleanupStack::Pop( self ); + LOGGER_LEAVEFN( "CntParserServerSession::NewL()" ); + return self; + } +//------------------------------------------------------------ +// CCntParserServerSession::ConstructL( CCntParserServer* aServer ) +//------------------------------------------------------------ +void CCntParserServerSession::ConstructL( CCntParserServer* aServer ) + { + iContactsParserSrv = aServer; + iContactsParserSrv->IncreaseSessionCountL(); + } +//------------------------------------------------------------ +// CCntParserServerSession::~CCntParserServerSession() +//------------------------------------------------------------ +CCntParserServerSession::~CCntParserServerSession() + { + LOGGER_ENTERFN( "CntParserServerSession::~CCntParserServerSession()" ); + if ( iContactsParserSrv ) + { + iContactsParserSrv->DecreaseSessionCount(); + } + LOGGER_LEAVEFN( "CntParserServerSession::~CCntParserServerSession()" ); + } +//------------------------------------------------------------ +// CCntParserServerSession::ServiceL( const RMessage2& aMessage ) +//------------------------------------------------------------ +void CCntParserServerSession::ServiceL( const RMessage2& aMessage ) + { + LOGGER_WRITE( "CntParserServerSession: ServiceL" ); + + TInt err( KErrNone ); + TInt ret( KErrNone ); + + TRAP( err, ret = DispatchMessageL( aMessage ) ); + + if ( err != KErrNone ) + { + LOGGER_WRITE_1( "CntParserServerSession: ServiceL: Error trapped, complete with ERR code %d", err ); + + iPhoneBookRequest = EFalse; //If requested, then clear request flag + iContactsParserSrv->SetRequests( 0 ); //Reset requests count in server to allow new requests to start.. + aMessage.Complete( err ); //If trap error, complete with it + return; + } + + if ( ret == KErrNone ) + { + LOGGER_WRITE( "CntParserServerSession: ServiceL: No complete" ); + return; + } + + if ( ret == KPerformComplete ) + { + LOGGER_WRITE( "CntParserServerSession: ServiceL: Normal complete" ); + + aMessage.Complete( KErrNone ); + return; + } + + if ( ret == KPBNotUpdated ) + { + LOGGER_WRITE( "CntParserServerSession: ServiceL: Complete (PB not updated)" ); + + iPhoneBookRequest = EFalse; + aMessage.Complete( KPBNotUpdated ); + return; + } + LOGGER_WRITE( "CntParserServerSession: ServiceL: Error, should never come here" ); + aMessage.Complete( KErrGeneral ); + } +//------------------------------------------------------------ +// CCntParserServerSession::CompletePhoneBookRequest( TInt aErr ) +//------------------------------------------------------------ +void CCntParserServerSession::CompletePhoneBookRequest( TInt aErr ) + { + LOGGER_WRITE( "CntParserServerSession: CompletePhoneBookRequest" ); + + if ( iPhoneBookRequest ) //If this session has requested phonebook, then the completion should be done here, as it was not done in ServiceL + { + LOGGER_WRITE( "CntParserServerSession: CompletePhoneBookRequest: collector or cancel" ); + iPhoneBookRequest = EFalse; + iPhoneBookRequestMessage.Complete( aErr ); + } + else + { + LOGGER_WRITE( "CntParserServerSession: CompletePhoneBookRequest: No complete for this session" ); + } + } +//------------------------------------------------------------ +// CCntParserServerSession::DispatchMessageL( const RMessage2 &aMessage ) +//------------------------------------------------------------ +TInt CCntParserServerSession::DispatchMessageL( const RMessage2 &aMessage ) + { + LOGGER_WRITE( "CntParserServerSession: DispatchMessageL" ); + + TInt res( KPerformComplete ); + + switch( aMessage.Function() ) + { + case ECntParserServerCreateIrMCL2: //Create pb.vcf file + { + res = ETrue; + + if ( iPhoneBookRequest == EFalse ) + { + iPhoneBookRequestMessage = aMessage; + iPhoneBookRequest = ETrue; + + TInt sid=aMessage.SecureId(); + TInt MaxNumOfContacts = aMessage.Int0(); + TBool Forced = aMessage.Int1(); + TBuf<8> sidLit; + sidLit.AppendNumFixedWidth( sid, EHex, 8); + TBuf<255> path; + path.Insert( 0, KPhoneBookFilename ); + + res = iContactsParserSrv->CreateIrMCL2PhoneBookL( path, (TInt) MaxNumOfContacts, Forced ); + } + break; + } + case ECntParserServerCntParsed: //How many contacts already parsed + { + TPckgBuf p((TInt) iContactsParserSrv->ContactsParsed()); + aMessage.WriteL( 0, p, 0 ); + break; + } + case ECntParserServerTotalNumOfContacts: //How many contacts total? + { + TPckgBuf p((TInt) iContactsParserSrv->TotalNumOfContacts()); + aMessage.WriteL( 0, p, 0 ); + break; + } + case ECntParserServerDisconnect: //Disconnect session from server + { + iContactsParserSrv->Disconnect(); + break; + } + case ECntParserServerCancel: //Cancel phone book request + { + if (iPhoneBookRequest) + { + iContactsParserSrv->CancelPhoneBookRequest(); + CompletePhoneBookRequest( KErrCancel ); + } + break; + } + case ECntParserServerCntSaved: //How many contacts total? + { + TPckgBuf p((TInt) iContactsParserSrv->ContactsSaved()); + aMessage.WriteL( 0, p, 0 ); + break; + } + case ECntParserServerCancelAll: //Cancel all requests, not just current? + { + iContactsParserSrv->CancelAllPhoneBookRequests(); + break; + } + // requests we don't understand + // so panic the client here, this function also completes the message + default: + { + PanicClient( EBadRequest ); + break; + } + } + return res; + } +//------------------------------------------------------------ +// CCntParserServerSession::PanicClient(TInt aPanic) const +//------------------------------------------------------------ +void CCntParserServerSession::PanicClient(TInt aPanic) const + { + User::Panic( KTxtServer,aPanic ); + } + +// end of file